1

android使用中のバックアップ アプリを作成していますが、バックアップは実際には予定時刻にすぐには行われないため、呼び出されてデータが Google サーバーに保存されるという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()が、アプリケーションに表示されませんでした。バックアップが発生してユーザーがアプリケーションを開くたびにこのメッセージを表示したい、または既に開いている場合は、その時点でどのアクティビティがフォアグラウンドであっても表示したい、または誰かがnotificationAndroidnotificationバーで作成する方法を教えてくれます。

ダイアログを作成して表示した行にエラーがあり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());

編集 :

もう1つのオプションは、アプリケーションクラスの静的コンテキストです。

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);

よし、その方法で試してみましょう

  • 1 つの静的コンテキスト mContext を作成します。
  • 次に、アクティビティ onCreate で mContext = youractivity.this; のように記述します。
  • mContext のような単純な静的変数を呼び出すだけです。
于 2012-12-28T07:32:29.263 に答える