【发布时间】:2014-09-27 15:54:57
【问题描述】:
这个让我和我的团队彻底疯了。
我们无法重现,因为它在我们所有的测试设备上都运行良好,但是我们收到了成千上万的崩溃报告,它们抱怨通过 onCreate 中的 findViewById 获得的 TextView 的 java.lang.NullPointerException(在调用 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,因为我们也在其他地方使用它。
【问题讨论】:
-
您是否有可能在不同的限定文件夹中拥有多个 premium_activity_layout 副本?
-
可能是您在不同的布局中声明了多个具有相同名称“premiumHeaderTextView”的 id,并且未在您的 premium_activity_layout 中定义。所以请再次检查。
-
@G.BlakeMeike 布局文件只有一份。
-
@Yogendra 没有重复的 ID。
-
我将尝试修复,如果我能确认它有效,我会更新你们。对于一个更奇怪的问题,这将是一个奇怪的解决方案: - 我注意到所有崩溃都发生在平板电脑设备上 - 我在 /res/layout 下只有一个布局文件 - 但是在以前的版本中,我曾经有过,我们在此版本中删除的平板电脑的 /res/layout-large。 => 似乎在某些平板电脑上,旧布局文件的“缓存”副本在更新 apk 时没有被删除,这可以解释崩溃。 => 我即将发布一个新版本,我的布局在 /res/layout-large 中重复