gpt4 book ai didi

android - findViewById 返回空 TextView

转载 作者:行者123 更新时间:2023-11-29 17:46:43 27 4
gpt4 key购买 nike

这个让我和我的团队都快疯了。

我们无法重现,因为它在我们所有的测试设备上都运行良好,但我们收到了数以千计的崩溃报告,提示 TextView 的 java.lang.NullPointerException 是通过 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 行)

不确定是否相关,但该 Activity 扩展了 SherlockFragmentActivity

当然,premiumInfoHeaderTextView 在 onCreate 方法之外声明为 TextView,因为我们也在其他地方使用它。

最佳答案

对疯狂错误的疯狂修复!!

正如我之前的评论所预期的那样,这个错误来自于一个旧的平板电脑布局 xml 文件(在/res/layout-large 下)已在我们的最新版本中被删除(我们现在在/下使用单个布局文件)资源/布局)。

记住导致 Null 异常的行:

premiumInfoHeaderTextView = (TextView) findViewById(R.id.premiumHeaderTextView);

这是因为我们之前的版本布局没有任何id = premiumHeaderTextView的 View ,并且在一些从之前版本升级到新版本的平板电脑上,旧的布局文件没有被删除,并且因此,系统在旧的/res/layout-large/premium_activity_layout.xml 而不是新的(所有设备通用)/res/layout/premium_activity_layout.xml 中寻找 id

使用 crashlytics 了解所有崩溃都发生在平板设备上是识别此“错误”的关键,该错误在某些平板电脑上似乎是系统错误,因为升级 apk 时它们不应保留旧资源文件。

总而言之,我将/res/layout/premium_activity_layout.xml 复制到/res/layout-large 以强制平板电脑用户使用新布局,而不是旧的“缓存”版本。这已经完全修复了错误

关于android - findViewById 返回空 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26076445/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com