3

スレッドが終了したときに通知されるハンドラーからアラートダイアログを作成したいのですが、これが私のコードです。

android.view.WindowManager $ BadTokenException:ウィンドウを追加できません-トークンnullはアプリケーション用ではありません

Handler handler = new Handler() {
      @Override
      public void handleMessage(Message msg) {

        if (dialog != null)
        {
            dialog.dismiss();
            dialog = null;
        }

        switch (serverResponseCode)
        {
        case 200:
        {
            AlertDialog alertDialog;
            alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
            alertDialog.setTitle("Super :)");
            alertDialog.setMessage("Poza a fost trimisa cu success.");
            alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {

                  public void onClick(DialogInterface dialog, int id) {

                     finish();

                } }); 
            alertDialog.show();
            serverResponseCode = -1;

            break;
        }
        default:
        {
            AlertDialog alertDialog;
            alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
            alertDialog.setTitle("Eroare :(");
            alertDialog.setMessage("Eroare la trimiterea pozei.");
            alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {

                  public void onClick(DialogInterface dialog, int id) {

                     finish();

                } }); 
            alertDialog.show();

            break;
        }
        }


         }
     };
4

3 に答える 3

5

おそらく問題は、getApplicationContext() がアクティビティ コンテキストではないことです。

    alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
    //should be change to
    alertDialog = new AlertDialog.Builder( YourActivity.this ).create();
于 2012-04-25T14:16:50.610 に答える
3

アプリケーションコンテキストを使用してダイアログを作成することはできません。代わりに、アクティビティコンテキストを使用してください。

また、ダイアログを作成するその方法は、特にアクティビティが何らかの理由で再開された場合、後で問題を引き起こすことになります。ダイアログフラグメントまたは管理対象ダイアログ(アクティビティのshowDialog()メソッド)のいずれかを使用する必要があります

于 2012-04-25T14:11:23.870 に答える
1

Android内でWebServiceの要求/応答を行っていると確信している場合は、スレッド管理について気にする必要がないため、AndroidでPainlessThreadingとして知られているAsyncTaskを実装することをお勧めします。

参考までに、内部-WebdoInBackground()呼び出しロジックを記述し、内部onPostExecute()-表示するアラートダイアログを表示します。

于 2012-04-25T14:14:31.200 に答える