134

ダイアログを開こうとすると、次の Android 例外が発生します。誰かが何が起こっているのかを理解するのを手伝ってくれますか?どうすればこの問題を解決できますか?

android.view.WindowManager$BadTokenException: 
  Unable to add window -- token null is not for an application
    at android.view.ViewRoot.setView(ViewRoot.java:509)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.app.Dialog.show(Dialog.java:241)
4

12 に答える 12

421

私は推測しています-アプリケーションコンテキストでDialogを作成しようとしていますか?このようなもの:

new Dialog(getApplicationContext());

これは間違っています。アクティビティコンテキストを使用する必要があります。

あなたは次のように試してみる必要があります:

new Dialog(YourActivity.this);
于 2011-10-28T18:32:52.067 に答える
34

を引き続き使用できますが、使用するgetApplicationContext()前に次のフラグを追加する必要があります: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)、エラーは表示されません。

そして、パーミッションを追加することを忘れないでください:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
于 2014-12-25T08:01:07.107 に答える
12

希望のようなgetParent()議論の場所で試してみてください、それは私にとってはうまくいきました。contextnew AlertDialog.Builder(getParent());

于 2013-02-01T07:07:37.747 に答える
3

私は推測しています-使用してダイアログを作成しようとしていますか。

 getApplicationContext()
 mContext which is passed by activity.

ダイアログ以外のアクティビティ クラスを表示する場合は、アクティビティをパラメータとして渡す必要があります。

Activity activity=YourActivity.this;

これでうまくいきます。

何か問題がありましたら、お知らせください。

于 2013-05-04T04:34:24.570 に答える
2

コンテキストフィールドでこれを試しました:

this.getActivity().getParent()

それは私にとってはうまくいきます。これは、「フラグメント」から拡張されたクラスからのものでした。

public class filtro extends Fragment{...
于 2013-05-04T03:32:58.200 に答える
0

以下の 2 つのケースを使用して、Cordova プラグインで進行状況ダイアログを開こうとすると、この例外が発生しました。

  1. 新しい ProgressDialog(this.cordova.getActivity().getParent());

  2. 新しい ProgressDialog(this.cordova.getActivity().getApplicationContext());

後にこう変化し、

新しい ProgressDialog(this.cordova.getActivity());

私にとってはうまくいきます。

于 2017-08-17T07:02:02.250 に答える
0

フラグメントからダイアログを表示しようとしている場合に備えて。「getActivity()」メソッドを使用するだけです。

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
于 2021-05-07T09:22:15.950 に答える