代码之家  ›  专栏  ›  技术社区  ›  Mervin

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

  •  3
  • Mervin  · 技术社区  · 14 年前

    老问题:“为什么创建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 回复  |  直到 10 年前
        1
  •  1
  •   Adinia Nirmal Dhara    12 年前

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

        2
  •  2
  •   mattbasta    14 年前

    getApplicationContext() ctx 包含对您的活动的引用。

    祝你好运!

        3
  •  1
  •   Leaudro    14 年前

        4
  •  1
  •   Vlad    12 年前
    @Override
    public boolean onTouch(View V, MotionEvent event) {
     ...
     Toast toast = Toast.makeText(V.getContext(), ...
    

    如果V是你的观点,那就行了。

        5
  •  0
  •   Nikola Smiljanić    14 年前

    似乎您已经尝试在某个地方取消对空指针的引用,尝试进入调试器并查看其确切位置。可能是因为 .setGravity 打电话。这表明 Toast.makeText 未能创建您的toast。您应该注意,祝酒词可以通过活动或服务创建和显示。

        6
  •  0
  •   Richard Szalay    14 年前

    将代码包装在try catch中,并检查抛出的异常的堆栈跟踪。听起来像是在您不期望的情况下调用了某个活动的回调方法。