这个让我和我的团队完全疯狂。
我们无法复制,因为它在我们所有的测试设备上运行良好,但我们收到数千个崩溃报告,抱怨java.lang.NullPointerException是一个TextView,它是由onCreate中的findViewById获取的(在调用setContentView之后)正确的id和布局文件)
java.lang.RuntimeException: Unable to start activity ComponentInfo{xxxxxxxxxxxxx.activities.PremiumActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
at android.app.ActivityThread.access$600(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4895)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.NullPointerException
at xxxxxxxxx.activities.PremiumActivity.onCreate(PremiumActivity.java:258)
at android.app.Activity.performCreate(Activity.java:5163)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
at android.app.ActivityThread.access$600(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4895)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
at dalvik.system.NativeStart.main(NativeStart.java)
这是onCreate方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.premium_activity_layout);
premiumInfoHeaderTextView = (TextView) findViewById(R.id.premiumHeaderTextView);
int themeColor = MPThemeManager.getSharedInstance(this).themeColor();
premiumInfoHeaderTextView.setTextColor(themeColor);
最后一行是导致nullPointerException(第258行)
的行不确定它是否相关但活动扩展了SherlockFragmentActivity
当然,premiumInfoHeaderTextView在onCreate方法之外被声明为TextView,因为我们也在别处使用它。
答案 0 :(得分:3)
疯狂修复疯狂的错误!!
正如我在之前的评论中所预料的那样,该错误来自于我们最新版本中已删除平板电脑的旧布局xml文件(在/ res / layout-large下)(我们现在使用/下的单个布局文件) RES /布局)。
记住导致Null异常的行:
premiumInfoHeaderTextView = (TextView) findViewById(R.id.premiumHeaderTextView);
这是因为我们以前的版本布局没有id = premiumHeaderTextView的任何视图,而且在某些平板电脑上,对于从之前版本升级到新版本的用户,旧的布局文件尚未删除,系统因此在旧的/res/layout-large/premium_activity_layout.xml中寻找id,而不是在新的(所有设备通用)/res/layout/premium_activity_layout.xml
中寻找id使用crashlytics了解平板电脑设备上发生的所有崩溃是确定这个“错误”的关键,这似乎是某些平板电脑上的系统错误,因为在升级apk时它们不应该保留旧的资源文件。
总而言之,我将/res/layout/premium_activity_layout.xml复制到/ res / layout-large,以强制平板电脑用户使用新的布局,而不是旧的“缓存”版本。这完全解决了错误