android - 即使对象不为空,也出现空指针异常

标签 android nullpointerexception

我遇到了一个有点奇怪的问题。我正在尝试从资源中获取字符串,我有一个非 activity class,我在其中获取 context,如下所示:

App app= App.getInstance();
if (app != null) {
    return app.getResources().getString(R.string.overview);
}

调试时控件进入 if 语句,这意味着 app 不为空。

应用类:

public class App extends Application {

    private static App app = new App ();

    private App () {

    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    public static App getInstance() {
        if (app == null) {
            app = new App ();
        }
        return app;
    }
}

一切似乎都很好,但是当我运行它时出现空指针异常:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
        at android.content.ContextWrapper.getResources(ContextWrapper.java:87)
        at com.emanager.ui.adapters.HomePagerAdapter.getPageTitle(HomePagerAdapter.java:45)
        at android.support.design.widget.TabLayout.populateFromPagerAdapter(TabLayout.java:773)
        at android.support.design.widget.TabLayout.setPagerAdapter(TabLayout.java:764)
        at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:716)
        at com.emanager.ui.activities.HomeActivity.onCreate(HomeActivity.java:65)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我试过其他一些方法,但似乎没有解决它。

如何修复此异常?

最佳答案

您不应该自己创建应用程序,它会在您的应用程序运行后在 Activity 开始之前创建。

试试这个:

public class App extends Application {

    private static App app;

   @Override
   public void onCreate() {
       super.onCreate();
       app = this;
   }

   public static App getInstance() {
       return app;
   }
}

关于android - 即使对象不为空,也出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38288005/

相关文章:

android - 同时运行 BlueStacks 的多个实例进行开发

php - 在 android 应用程序和 php 服务器中使用 http get/post 请求时出现文本编码错误?

android - 带有 AndroidFragments 的 onSaveInstanceState 上的 NullPointerException

android - java.lang.RuntimeException : Unable to start activity ComponentInfo 错误

java - 无法定位空指针异常的起源

java - Android对话框阴影?

android - 一个ListView支持多少种资源布局?

java - 必须有返回类型或回调作为最后一个参数 Retrofit2 Android?

java - android java.lang.nullpointerException

java - 什么是NullPointerException,我该如何解决?