Android SDK:java.lang.NullPointerException:尝试调用虚拟方法

9

当我尝试在我的设备上调试应用程序时,我遇到了这个错误,并且已经花了几个小时来消除它...但是一直无法解决...如果有人能找到解决方案,那将非常棒,因为我希望尽快发布我的应用程序的新更新。

07-05 22:45:02.550    2821-2821/davvarn.csgo_maps E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: davvarn.csgo_maps, PID: 2821
    java.lang.RuntimeException: Unable to start activity ComponentInfo{davvarn.csgo_maps/davvarn.csgo_maps.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object reference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2356)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
            at android.app.ActivityThread.access$900(ActivityThread.java:154)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageDrawable(android.graphics.drawable.Drawable)' on a null object reference
            at davvarn.csgo_maps.MainActivity.changeContent(MainActivity.java:176)
            at davvarn.csgo_maps.MainActivity.onCreate(MainActivity.java:115)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2309)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
            at android.app.ActivityThread.access$900(ActivityThread.java:154)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5289)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

我真的不知道如何在这里粘贴MainActivity文件,因为我是Stackoverflow新手。请告诉我怎么做,我会尝试一下。


问题出现在davvarn.csgo_maps.MainActivity类的changeContent方法中。 - krystian71115
2
问题出在这一行:176。我在你粘贴的logcat中看到了它。转到这一行并检测为什么imageview实例为空。您可以单击编辑(在您的问题下方)并将此行添加到问题中。 - krystian71115
也许你忘记设置这个变量了,导致它为 null。请检查 Zack Matthews 的回答。 - krystian71115
谢谢您的快速回复!但是我应该在哪里上传代码呢? - Davvarn
如果你想回复某人的评论,在评论顶部添加:@用户名 - krystian71115
显示剩余13条评论
3个回答

8

确保已经初始化了您的ImageView并且正在使用在您XML中定义的正确ID。您可以像这样初始化您的ImageView:

ImageView imageView = (ImageView)findViewById(R.id.yourImageViewIDHere);

在onCreate调用setContentView之后进行此操作。


0
尝试一下这个。。
imgview = (ImageView) findViewById(R.id.imageView);
imgview.setBackgroundResource(R.drawable.image2);

希望这能对你有所帮助 :)

0
在你的layout.xml文件中的ImageView标签里,不要使用android:src或者app:srcCompat属性,而是使用以下属性:
android:background="@drawable/yourfilename"

希望这篇文章能够帮助到那些在以下情况下遇到异常的人:
1. 在设置ImageView的背景资源时; 2. 或者在更新ImageView的资源、或者根据当前资源执行某些操作时,通过获取ImageView的当前背景资源来实现。
YourImageView.getBackground().getConstantState().equals(
                        getResources().getDrawable(R.drawable.YourImageView).getConstantState())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接