为什么在onCreate()之外显示Toast会使我的应用程序崩溃?

时间:2010-06-20 07:39:52

标签: android android-emulator toast

旧问题:“为什么创建Toast会使我的应用程序崩溃?”

如果我不使用祝酒词,我的应用程序运行正常,但如果我想创建并显示这样的简单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

我已经检查并仔细检查上面的代码是什么让它崩溃。 我正在模拟器上运行,因为我目前没有安卓手机。

6 个答案:

答案 0 :(得分:2)

据我所知,您无法使用应用程序上下文显示祝酒词,您必须使用“活动”上下文显示它。吐司没有绑定到您的应用程序,它绑定到您正在显示它的活动。不要使用getApplicationContext(),而是尝试使用名为ctx的变量,其中包含对您的活动的引用。

祝你好运!

答案 1 :(得分:1)

由于某种原因,getApplicationContext返回null。请在侦听器内部的onClick()方法中尝试“ActivityName.this”。

答案 2 :(得分:1)

任何被视为“阻塞”的功能都必须从线程内部创建。这包括模态对话框,写入共享首选项,访问URL以及奇怪的简单Toast消息。

这些东西在从活动的onCreate调用时有效,但是需要一个线程/处理程序设置才能从任何地方调用。

答案 3 :(得分:1)

@Override
public boolean onTouch(View V, MotionEvent event) {
 ...
 Toast toast = Toast.makeText(V.getContext(), ...

其中V是您的View将正常工作。 您还可以在构造函数中使用appConntext()。

答案 4 :(得分:0)

您似乎尝试在某处取消引用Null指针,尝试单步调试并查看确切位置。它可能是.setGravity电话。这表明Toast.makeText未能创建你的祝酒词。您应该注意,可以从活动或服务创建和显示toasts。

答案 5 :(得分:0)

将代码包装在try-catch中,并检查抛出的Exception上的堆栈跟踪。听起来好像是在调用Activity的时候调用了一个回调方法。