旧问题:“为什么创建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
我已经检查并仔细检查上面的代码是什么让它崩溃。 我正在模拟器上运行,因为我目前没有安卓手机。
答案 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的时候调用了一个回调方法。