提问者:小点点

在片段中创建Toast后出现空指针异常


我试图展示一个祝酒词,当我的API请求不工作,由于没有互联网连接。首先,我尝试在try块失败时显示一个Toast,然后在catch块中显示这个Toast。我尝试了developer.android.com的方法,但我甚至无法启动应用程序。

我在catch-block中的代码是这样的:

} catch {
Context context = getApplicationContext();
Toast.makeText(context, "No Internet Connection.", Toast.LENGTH_SHORT).show();
}

我似乎对getApplicationContext()方法有问题,因为它突出显示为红色。这似乎是一个问题,因为我在一个片段内部使用这个。我在使用activity·activity=getActivity()时读到了一些内容,但当尝试将这个activity作为上下文插入makeText()方法时,我得到了以下错误消息:

E/AndroidRuntime: FATAL EXCEPTION: Thread-4
    Process: com.example.dhapp, PID: 16158
    java.lang.NullPointerException: Can't toast on a thread that has not called Looper.prepare()
        at com.android.internal.util.Preconditions.checkNotNull(Preconditions.java:157)
        at android.widget.Toast.getLooper(Toast.java:287)
        at android.widget.Toast.<init>(Toast.java:256)
        at android.widget.Toast.makeText(Toast.java:891)
        at android.widget.Toast.makeText(Toast.java:879)
        at com.example.dhapp.SearchFragment$apiThread.run(SearchFragment.java:112)

有什么建议能让我这么做吗?提前多谢了!


共2个答案

匿名用户

听起来您没有从主线程内调用toast.makeText()。您从其中调用的线程需要访问UI,本质上是为了显示Toast。

这个SO线程可能会给你一些指针。

匿名用户

您可以尝试requireActivity(),而不是使用getApplicationContext()