3

古い質問: 「Toast を作成するとアプリケーションがクラッシュするのはなぜですか?」

トーストを使用しない場合、アプリケーションは正常に動作しますが、次のような単純なトーストを作成して表示する場合:

   Toast SimpleToast = Toast.makeText(getApplicationContext(), "Just a toast.",Toast.LENGTH_LONG);
   SimpleToast.setGravity(Gravity.TOP, 0, 0);
   SimpleToast.show();

ログに次の行が表示され、アプリがクラッシュします。

NotificationService   enqueueToast pkg=games.MyAppName callback=android.app.ITransientNotification$Stub$Proxy@49603368 duration=1
ResourceType          No package identifier when getting name for resource number 0x00000000
AndroidRuntime        Shutting down VM
dalvikvm              threadid=3: thread exiting with uncaught exception (group=0x4001b188)
AndroidRuntime        Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime        java.lang.NullPointerException

上記のコードを確認し、再確認しましたが、それがクラッシュの原因です。現在Androidフォンを持っていないため、エミュレーターで実行しています。

4

6 に答える 6

2

私の知る限りでは、アプリケーション コンテキストでトーストを表示することはできません。アクティビティ コンテキストで表示する必要があります。トーストはアプリにバインドされているのではなく、表示しているアクティビティにバインドされています。を使用する代わりに、アクティビティへの参照を含むgetApplicationContext()という名前の変数を使用してみてください。ctx

幸運を!

于 2010-06-20T08:24:47.957 に答える
1
@Override
public boolean onTouch(View V, MotionEvent event) {
 ...
 Toast toast = Toast.makeText(V.getContext(), ...

ここで V はあなたのビューで正常に動作します。コンストラクターで appConntext() を使用することもできます。

于 2012-08-20T21:43:14.760 に答える
1

「ブロッキング」と見なされる機能は、スレッド内から作成する必要があります。これには、モーダル ダイアログ ボックス、共有設定への書き込み、URL へのアクセス、奇妙なことに単純なトースト メッセージが含まれます。

これらは、アクティビティの onCreate から呼び出されたときに機能しますが、どこからでも呼び出せるようにするには、スレッド/ハンドラーのセットアップが必要です。

于 2011-04-14T16:47:46.937 に答える
1

何らかの理由で、getApplicationContext が null を返します。代わりに、リスナー内の onClick() メソッドで「ActivityName.this」を試してください。

于 2010-08-12T20:09:03.203 に答える
0

コードを try-catch でラップし、スローされた例外のスタック トレースを確認します。予期しないときにアクティビティのコールバック メソッドが呼び出されているようです。

于 2010-06-20T08:21:17.297 に答える
0

Null ポインターをどこかで逆参照しようとしたようです。デバッガーにステップインして、正確な場所を確認してください。それは.setGravity電話かもしれません。Toast.makeTextこれは、がトーストの作成に失敗したことを示しています。トーストはアクティビティまたはサービスから作成および表示できることに注意してください。

于 2010-06-20T07:58:25.463 に答える