Android для отображения диалогового окна предупреждения из класса без пользовательского интерфейса или без активности

Привет Android-программистам!

Этот вопрос задан ранее. Но ответа нет. Поэтому мне нужно решение для этого. На самом деле я пытаюсь отобразить окно предупреждения о Mainactivity.java звонке из test.java (бездействия).

Это работает нормально, если нет кода пользовательского интерфейса. если этот код зависит от пользовательского интерфейса, это означает, что он генерирует ошибки.

Класс активности:

public class Mainactivity extends Activity
{
    public void message()
    {
        Log.i("Success : Call from non-UI & non activity class");//Upto this line working if i called message() function from other non-activity class
        DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener()
        {
        public void onClick(DialogInterface dialog, int which)
        {
             switch (which)
             {
                //Code
            }
         }
     };
     AlertDialog.Builder builder = new AlertDialog.Builder(this);
     builder.setTitle("FMS Status Message :- ");
     builder.setMessage(msg)
     .setPositiveButton("OK",dialogClickListener).show();

    }
}

Класс без активности:

public class test extends BroadcastReceiver
{
    Mainactvity in = new Mainactvity();   

    @Override   
    public void onReceive(Context context, Intent intent)
    {
       in.message();
    }
}

Если это будет решено, то моя основная цель моего проекта будет выполнена. Пожалуйста, кто-нибудь из вас помогите мне.

Заранее спасибо.


person DillGates    schedule 14.02.2013    source источник
comment
Если выдает ошибки - не могли бы вы опубликовать ошибку?   -  person Anukool    schedule 14.02.2013
comment
Почему вы не думаете о передаче контекста и активности из вашей основной активности в классовый тест. А также код, который вы показываете, является плохой практикой программирования для Android,   -  person Sree    schedule 14.02.2013


Ответы (2)


Прежде всего, плохая практика программирования для Android,

Mainactvity in = new Mainactvity();   

Вы не можете создать конструктор класса Activity.

И во-вторых, вы пытаетесь отобразить элементы пользовательского интерфейса в диалоговом окне, которое не имеет ссылки на действие, в BroadcastReceiver. Используйте Context Activity (если это связано с пользовательским интерфейсом) или Application для отображения диалога в BroadcastReceiver.

person user370305    schedule 14.02.2013
comment
Хорошо, я это понимаю. Есть ли возможность отображать окно предупреждения в тестовом классе? - person DillGates; 14.02.2013
comment
Я пробовал это, но это не работает: Context mContext = getApplicationContext(); окончательный AlertDialog.Builder alert = новый AlertDialog.Builder(mContext); alert.setTitle(Получено сообщение, От: + до); alert.setCancelable (истина); оповещение.показать(); Обратите внимание, что тестовый класс не является активностью. Пожалуйста ответьте мне. - person DillGates; 14.02.2013
comment
На самом деле мне нужно отобразить окно предупреждения в тестовом (неактивном) классе. Вот и все..! - person DillGates; 14.02.2013
comment
Вы не можете сделать AlertDialog в BroadcastReceiver. Вы должны поддерживать механизм обратного вызова с вашими Activity и BroadcastReceiver. Как только вы получите соответствующее действие в широковещательном приемнике, которое запускает вашу активность, и из активности вы можете вызвать метод AlertDialog. Посмотрите на stackoverflow. ком/вопросы/4844031/ - person user370305; 14.02.2013

Создайте Constructor, где вы можете получить Activity. Нравится -

Activity activity;
public test (Activity activity){
         this.activity = activity;
}

Теперь используйте этот activity в качестве аргумента -

AlertDialog.Builder adb=new AlertDialog.Builder(activity);

Поскольку диалог нельзя отобразить, используя только context. Для этого вам нужно предоставить Activity.

Я ответил на один здесь

person Darpan    schedule 15.10.2014
comment
Это не работает. Диалог не создается с переданным действием, без ошибки, но и без диалога. - person Ekta; 22.06.2016
comment
Вы можете задать новый вопрос и опубликовать свой код, чтобы я мог его увидеть. - person Darpan; 22.06.2016
comment
Я понимаю, что это не работает, хотя хорошая идея: java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.content.res.Resources$Theme android.content.Context.getTheme()' для ссылки на нулевой объект - person Jonas; 08.12.2016