OnClick中的Android应用程序Java NullPointerException

OnClick中的Android应用程序Java NullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,在过去的几天里,我一直在尝试调试Android应用程序中的一个OnLickListener事件中的一个非常奇怪的Java NullPointerException(我真的不知道是哪个) 我的应用程序在Play Store中发布,并且启用了Firebase崩溃报告,这是我关于该漏洞的任何详细信息的来源,Firebase报告了以下堆栈跟踪: Exception java.lang.NullPointerException: package.name.activity.QuoteList$1.onC

在过去的几天里,我一直在尝试调试Android应用程序中的一个OnLickListener事件中的一个非常奇怪的Java NullPointerException(我真的不知道是哪个)

我的应用程序在Play Store中发布,并且启用了Firebase崩溃报告,这是我关于该漏洞的任何详细信息的来源,Firebase报告了以下堆栈跟踪:

Exception java.lang.NullPointerException:

package.name.activity.QuoteList$1.onClick (QuoteList.java)
android.view.View.performClick (View.java:4439)
android.widget.ImageButton.performClick (ImageButton.java:105)
android.view.View$PerformClick.run (View.java:18395)
android.os.Handler.handleCallback (Handler.java:725)
android.os.Handler.dispatchMessage (Handler.java:92)
android.os.Looper.loop (Looper.java:176)
android.app.ActivityThread.main (ActivityThread.java:5317)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1102)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:869)
dalvik.system.NativeStart.main (NativeStart.java)
出于隐私原因,我已在堆栈跟踪中将应用程序的包名重命名为“package.name”

这个问题已经在不同的用户中出现了50多次,但我注意到它只出现在API 17版本的Android 4.2.2中,我的其他用户使用其他Android版本时似乎没有受到影响

正如您在堆栈跟踪中所看到的,它没有提到QuoteList.java中的任何特定行,只是提示QuoteList$1,但我无法理解$1在这里的含义,请向我解释一下

下面是我有两个侦听器的代码:

btn_expand.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (adapter.isExpand()) {
            adapter.setExpand(false);
            adapter.notifyDataSetChanged();
            btn_expand.setImageResource(R.drawable.actionbar_ic_resize);
            btn_expand.setAdjustViewBounds(true);
        } else {
            adapter.setExpand(true);
            adapter.notifyDataSetChanged();
            btn_expand.setImageResource(R.drawable.actionbar_ic_resize_pressed);
            btn_expand.setAdjustViewBounds(true);
        }
    }
});

btn_logo.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent i = new Intent(getApplicationContext(), MainActivity.class);

        startActivity(i);
        QuoteList.this.finish();
    }
});

我希望有人能帮我解决这个问题,谢谢你的帮助。

解决了它!问题是,在某些情况下,在
onPostExecute()
中设置
适配器之前(通过按钮)调用了第一个
OnClickListener
,而侦听器是在
onCreate()
中定义的,在异步任务启动之前执行。当然会导致
NullPointerException

因此,解决方案是在将
adapter
设置为新适配器对象之后,将上述
OnClickListener
侦听器移动到
onPostExecute()


当您开始在Activity类中混合AsyncTask类时,很容易忽略这样的情况,并且您会忘记首先执行的是什么。所以我希望这个答案对将来的人有所帮助。

QuoteList$1是实现OnClickListener的匿名类的名称。匿名类的名称听起来很有趣,但它是第一(1)个在QuoteList中实现OnClickListener的匿名类吗?因为我在QuoteList类文件中有2个。我不知道,我不确定我们是否应该相信名称中的数字与它们在代码中出现的顺序相同。无论如何,如果您将代码发布到设置这些侦听器的位置,它不会影响Hum、adapter或btn_expand可能为空?你能再现这次坠机吗?