Android “上的NullPointerException”;getContext().getString(resId)&引用;

Android “上的NullPointerException”;getContext().getString(resId)&引用;,android,android-studio,nullpointerexception,ocr,crashlytics,Android,Android Studio,Nullpointerexception,Ocr,Crashlytics,我是一名在安卓OCR上从事学校项目的学生。目前,我已经在Android Studio 1.5中成功完成了OCR功能 然而,我想把这个应用程序(非材料主题)编译成另一个应用程序(材料主题设计)也在Android Studio中 我已经适当地复制和改进了大多数代码。然而,当我在我的设备上运行应用程序时,它在某个点崩溃了 我在应用程序中实现了Crashlytics,它显示以下错误: 以下是logcat信息: Fatal Exception: java.lang.RuntimeExceptio

我是一名在安卓OCR上从事学校项目的学生。目前,我已经在Android Studio 1.5中成功完成了OCR功能

然而,我想把这个应用程序(非材料主题)编译成另一个应用程序(材料主题设计)也在Android Studio中

我已经适当地复制和改进了大多数代码。然而,当我在我的设备上运行应用程序时,它在某个点崩溃了

我在应用程序中实现了Crashlytics,它显示以下错误:

以下是logcat信息:

    Fatal Exception: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.l33902.contactmanagment1512/com.example.l33902.contactmanagment1512.ShowImage}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int)' on a null object reference
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2546)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2754)
       at android.app.ActivityThread.access$900(ActivityThread.java:177)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5938)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getString(int)' on a null object reference
       at com.example.l33902.contactmanagment1512.AndrOCRApp.myGetString(AndrOCRApp.java:22)
       at com.example.l33902.contactmanagment1512.ShowImage.<init>(ShowImage.java:40)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.Class.newInstance(Class.java:1650)
       at android.app.Instrumentation.newActivity(Instrumentation.java:1079)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2536)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2754)
       at android.app.ActivityThread.access$900(ActivityThread.java:177)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:5938)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
-ShowImage.java

public class AndrOCRApp extends Application {

    private static AndrOCRApp s_instance;

    public AndrOCRApp ()
    {
        s_instance = this;
    }

    public static Context getContext()
    {
        return s_instance;
    }

    public static String myGetString(int resId)
    {
        **return getContext().getString(resId);**       
    }

}
私有最终字符串[]mSegModeArray={
androcrap.myGetString(R.string.PSM_AUTO),
AndrOCRApp.myGetString(R.string.PSM\u单块),
AndrOCRApp.myGetString(R.string.PSM_单线),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_WORD),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_CHAR),
AndrOCRApp.myGetString(R.string.PSM\u单个块\u垂直文本)
};

粗体的行是导致错误的代码

错误表明,尝试调用虚拟方法“java.lang.String android.content.Context.getString(int)”的对象引用为空

但是,我无法解决此错误,因为以前的原始项目(编译之前)没有显示此错误

非常感谢您提供的任何帮助/解决方案~

试试这个

getResources().getString(resId);
试试这个

getResources().getString(resId);

你的问题似乎在这里:

public AndrOCRApp ()
{
    s_instance = this;
}

对于诸如
应用程序
活动
片段
或任何其他生命周期由系统控制的Android framework对象,不应使用自定义构造函数。相反,请重写所需的生命周期方法。在这种情况下,您应该在应用程序类的
onCreate
生命周期方法中分配
s_实例

您的问题似乎在这里:

public AndrOCRApp ()
{
    s_instance = this;
}
对于诸如
应用程序
活动
片段
或任何其他生命周期由系统控制的Android framework对象,不应使用自定义构造函数。相反,请重写所需的生命周期方法。在这种情况下,您应该在应用程序类的
onCreate
生命周期方法中分配
s_实例

问题就在这里

return getContext().getString(resId);
您应该与应用程序类
实例一起使用

return s_instance.getContext().getString(resId);
问题就在这里

return getContext().getString(resId);
您应该与应用程序类
实例一起使用

return s_instance.getContext().getString(resId);

使用这种代码,问题是您不知道上下文来自何处。使用这种代码,问题是您不知道上下文来自何处。请尝试。但是,它仍然显示相同的错误。无论如何谢谢:)试过了。但是,它仍然显示相同的错误。谢谢你的回复,非常感谢。我从你的建议中尝试了几种方法,并一直在网上搜索类似的教程。但它仍然不起作用。您是否可以提供一个示例?只需删除您的构造函数并重写
onCreate
方法,然后将
s\u instance=this在那里。请查看文档:。另外,请确保您的应用程序已在清单中声明,否则系统将永远不会实例化它。谢谢:)不过,我只是在清单文件的标记下添加了一行:“android:name=“com.example.l33902.contactmanagement1512.AndrOCRApp”,就解决了这个问题。无论如何,我都会接受你的回答~谢谢你的回复,非常感谢。我从你的建议中尝试了几种方法,并一直在网上搜索类似的教程。但它仍然不起作用。您是否可以提供一个示例?只需删除您的构造函数并重写
onCreate
方法,然后将
s\u instance=this在那里。请查看文档:。另外,请确保您的应用程序已在清单中声明,否则系统将永远不会实例化它。谢谢:)不过,我只是在清单文件的标记下添加了一行:“android:name=“com.example.l33902.contactmanagement1512.AndrOCRApp”,就解决了这个问题。无论如何,我都会接受你的答案~