对话框显示在Android应用程序:如何设置上下文活动



我正在使用BackupManager创建android中的备份应用程序,但由于备份实际上发生在计划时间不及时,我只是想知道如何在dialogbox中显示onBackup()被调用的消息,现在您的数据保存在谷歌服务器上。主要问题是对话框的上下文应该是什么?到目前为止,我已经尝试过了,但是当onBackup()被调用时,它没有显示

    AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());
    builder.setTitle("BACKUP ALERT");
    builder.setMessage("Your Backup has been processed");
    builder.setPositiveButton("OK", null);
    AlertDialog dialog = builder.show();

我在onBackup()方法中写了这个,但它没有显示在我的应用程序上。我想在备份发生时显示此消息,用户打开我的应用程序,或者如果他已经打开,我想显示它,无论哪个活动是前台的时间,或者有人能给我的想法如何使它在android notificationnotification

在我创建和显示对话框的行Logcat上有一个错误…

12-28 13:22:52.722: E/JavaBinder(16540): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
12-28 13:22:52.722: E/JavaBinder(16540): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-28 13:22:52.722: E/JavaBinder(16540):    at android.os.Handler.<init>(Handler.java:121)
12-28 13:22:52.722: E/JavaBinder(16540):    at android.app.Dialog.<init>(Dialog.java:107)
12-28 13:22:52.722: E/JavaBinder(16540):    at android.app.AlertDialog.<init>(AlertDialog.java:118)
12-28 13:22:52.722: E/JavaBinder(16540):    at android.app.AlertDialog$Builder.create(AlertDialog.java:971)
12-28 13:22:52.722: E/JavaBinder(16540):    at com.vahzay.android.smstrove.MySmsBackupAgent1.onBackup(MySmsBackupAgent1.java:233)
12-28 13:22:52.722: E/JavaBinder(16540):    at android.app.backup.BackupAgent$BackupServiceBinder.doBackup(BackupAgent.java:490)
12-28 13:22:52.722: E/JavaBinder(16540):    at android.app.IBackupAgent$Stub.onTransact(IBackupAgent.java:80)
12-28 13:22:52.722: E/JavaBinder(16540):    at android.os.Binder.execTransact(Binder.java:338)
12-28 13:22:52.722: E/JavaBinder(16540):    at dalvik.system.NativeStart.run(Native Method)

和我的对话框的代码是:

 new AlertDialog.Builder(getApplicationContext())
    .setMessage("Backup Alert")
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() 
    {                   
        public void onClick(DialogInterface arg0, int arg1) 
        {
 Toast.makeText(getApplicationContext(), "Your SMS Record that you requested to backup earlier is now processed", Toast.LENGTH_LONG).show(); //-->233
        }
    }).create().show();
}

尝试改变,

AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

,

AlertDialog.Builder builder = new AlertDialog.Builder(getBaseContext());
编辑:

另一个选项是来自应用程序类, 的静态上下文
public class MyApplication extends Application{
    private static Context context;
    public void onCreate(){
        super.onCreate();
        MyApplication.context = getApplicationContext();
    }
    public static Context getAppContext() {
        return MyApplication.context;
    }
}

现在从任何地方调用

MyApplication.getAppContext()静态获取应用程序上下文

谢谢。

只是一个想法,如果它有效。我观察到我们需要同时使用.create().show()来显示alertDialiog

所以试着用builder.create().show();

编辑-我有以下工作代码为我,

new AlertDialog.Builder(getApplicationContext())
        .setMessage("Network is in Roaming")
        .setPositiveButton("Ok", new DialogInterface.OnClickListener() 
        {                   
            public void onClick(DialogInterface arg0, int arg1) 
            {
            }
        }).create().show(); 

如果它不工作,那么你可以调用一个活动,并在活动中显示相同的对话框。您可以将活动设置为透明的,这样只有对话框是可见的。

试试这个方法可能会有帮助

new AlertDialog.Builder(youractivity.this);

让我们试一下

    创建一个静态Context;
  • 然后在你的activity onCreate中写mContext = youractivity.this;
  • 就是这样简单的调用静态变量就像mContext;

最新更新