Android应用程序中的DialogBox显示:如何将Context设置为Activity

时间:2012-12-28 07:28:24

标签: android notifications alertdialog android-context

我正在android使用BackupManager创建备份应用,但由于备份实际上是在预定时间未及时发生的,我只是想知道如何在dialogbox中显示消息系统会调用onBackup(),现在您的数据会保存在Google服务器上。主要问题是对话框的上下文应该是什么? 到目前为止,我已经尝试了这个但是当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()方法中写了这个,但它没有显示在我的应用程序上。我希望在备份发生时显示此消息并且用户打开我的应用程序或者如果他已经打开我想要显示它,无论哪个活动是前景,或者有人可以让我知道如何使其成为notification在android notification栏中。

我创建的行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();
}

3 个答案:

答案 0 :(得分:1)

尝试改变,

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()静态获取您的应用程序上下文。

感谢。

答案 1 :(得分:1)

只是想一想,如果有效的话。 我发现我们需要同时使用.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(); 

如果根本不起作用,那么您可以调用一个活动并在激活中显示相同的对话框。您可以将活动设置为透明,以便只显示对话框。

答案 2 :(得分:0)

尝试这种方式可能会有所帮助

new AlertDialog.Builder(youractivity.this);

好吧,试试吧

  • 创建一个静态Context mContext;
  • 然后在你的活动onCreate中写下像mContext = youractivity.this;
  • 它只是简单地调用静态变量,如mContext;