"getContext().getString(resId);" 上的 NullPointerException
NullPointerException on "getContext().getString(resId);"
我是一名学生,正在从事 Android OCR 学校项目。目前,我已经在AndroidStudio 1.5.
中成功完成了OCR功能
但是,我想在 Android Studio 中将此应用程序(非 Material 主题)编译成另一个应用程序(具有 Material 主题设计)。
我已经适当地复制和完善了大部分代码。然而,当我 运行 我设备上的应用程序时,它在某个时刻崩溃了。
我在我的应用程序中实施了 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.access0(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.access0(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)
根据 Crashlytics 和 Logcat,我可以看出该错误是由 NullPointerException 引起的。但是,当我深入到导致错误的 logcat 所述的代码时,我无法弄清楚如何解决它。
正如 Crashlytics 和 Logcat 所述,问题的根源在于这两个文件(AndrOCRApp.java 和 ShowImage.java)(以下是代码):
- AndrOCRApp.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);**
}
}
- ShowImage.java
private final String[] mSegModeArray = {
AndrOCRApp.myGetString(R.string.PSM_AUTO),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_BLOCK),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_LINE),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_WORD),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_CHAR),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_BLOCK_VERT_TEXT)
};
粗体 行是导致错误的代码。
错误指出尝试调用虚拟方法 'java.lang.String android.content.Context.getString(int)' 是在空对象引用上。
但是我无法解决这个错误,因为之前的原始项目(编译前)没有显示这样的错误。
如有help/solutions不胜感激~
试试这个
getResources().getString(resId);
看来你的问题出在这里:
public AndrOCRApp ()
{
s_instance = this;
}
您不应该为 Application
、Activity
、Fragment
或任何其他生命周期由系统控制的 Android 框架对象使用自定义构造函数.相反,覆盖您需要的生命周期方法。在这种情况下,您应该在应用程序 class 的 onCreate
生命周期方法中分配 s_instance
。
问题就在这里
return getContext().getString(resId);
您应该在您的应用程序中使用 class instance
return s_instance.getContext().getString(resId);
我是一名学生,正在从事 Android OCR 学校项目。目前,我已经在AndroidStudio 1.5.
中成功完成了OCR功能但是,我想在 Android Studio 中将此应用程序(非 Material 主题)编译成另一个应用程序(具有 Material 主题设计)。
我已经适当地复制和完善了大部分代码。然而,当我 运行 我设备上的应用程序时,它在某个时刻崩溃了。
我在我的应用程序中实施了 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.access0(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.access0(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)
根据 Crashlytics 和 Logcat,我可以看出该错误是由 NullPointerException 引起的。但是,当我深入到导致错误的 logcat 所述的代码时,我无法弄清楚如何解决它。
正如 Crashlytics 和 Logcat 所述,问题的根源在于这两个文件(AndrOCRApp.java 和 ShowImage.java)(以下是代码):
- AndrOCRApp.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);**
}
}
- ShowImage.java
private final String[] mSegModeArray = {
AndrOCRApp.myGetString(R.string.PSM_AUTO),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_BLOCK),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_LINE),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_WORD),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_CHAR),
AndrOCRApp.myGetString(R.string.PSM_SINGLE_BLOCK_VERT_TEXT)
};
粗体 行是导致错误的代码。
错误指出尝试调用虚拟方法 'java.lang.String android.content.Context.getString(int)' 是在空对象引用上。
但是我无法解决这个错误,因为之前的原始项目(编译前)没有显示这样的错误。
如有help/solutions不胜感激~
试试这个
getResources().getString(resId);
看来你的问题出在这里:
public AndrOCRApp ()
{
s_instance = this;
}
您不应该为 Application
、Activity
、Fragment
或任何其他生命周期由系统控制的 Android 框架对象使用自定义构造函数.相反,覆盖您需要的生命周期方法。在这种情况下,您应该在应用程序 class 的 onCreate
生命周期方法中分配 s_instance
。
问题就在这里
return getContext().getString(resId);
您应该在您的应用程序中使用 class instance
return s_instance.getContext().getString(resId);