3

老问题:“为什么创建 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

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

4

6 回答 6

2

据我所知,你不能用应用程序上下文来展示祝酒词,你必须用 Activity 上下文来展示它。Toast 不绑定到您的应用程序,它绑定到您正在显示它的活动。尝试使用包含对您的活动的引用getApplicationContext()的变量,而不是使用。ctx

祝你好运!

于 2010-06-20T08:24:47.957 回答
1

出于某种原因,getApplicationContext 返回 null。在监听器内的 onClick() 方法上尝试“ActivityName.this”。

于 2010-08-12T20:09:03.203 回答
1

任何被认为是“阻塞”的特性都必须从线程内部创建。这包括模式对话框、写入共享首选项、访问 url 以及奇怪的是简单的 toast 消息。

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

于 2011-04-14T16:47:46.937 回答
1
@Override
public boolean onTouch(View V, MotionEvent event) {
 ...
 Toast toast = Toast.makeText(V.getContext(), ...

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

于 2012-08-20T21:43:14.760 回答
0

似乎您已尝试在某处取消引用 Null 指针,尝试进入调试器并查看确切位置。这可能是.setGravity电话。这将表明Toast.makeText未能创建您的吐司。您应该注意,可以从 Activity 或 Service 中创建和显示 toast。

于 2010-06-20T07:58:25.463 回答
0

将代码包装在 try-catch 中并检查引发的异常的堆栈跟踪。听起来好像 Activity 上的回调方法在您不期望的情况下被调用。

于 2010-06-20T08:21:17.297 回答