1

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

我创建并显示对话框的行有错误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();
}
4

3 回答 3

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

谢谢。

于 2012-12-28T07:37:13.237 回答
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(); 

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

于 2012-12-28T07:50:59.297 回答
0

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

new AlertDialog.Builder(youractivity.this);

好的,让我们尝试一下

  • 创建一个静态Context mContext;
  • 然后在您的活动 onCreate 中编写 mContext = youractivity.this;
  • 这只是简单的调用静态变量,如 mContext;
于 2012-12-28T07:32:29.263 回答