settings 報(bào)android.content.res.Resources$NotFoundException: Resource ID

定位過程


一、日志

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: FATAL EXCEPTION: main

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: Process: com.android.settings, PID: 4876

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: android.content.res.Resources$NotFoundException: Resource ID #0x0

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.-wrap12(ActivityThread.java)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.os.Looper.loop(Looper.java:154)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6121)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:190)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.content.res.Resources.loadXmlResourceParser(Resources.java:2101)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.content.res.Resources.getXml(Resources.java:1164)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:115)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:127)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.support.v14.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:440)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SettingsPreferenceFragment.addPreferencesFromResource(SettingsPreferenceFragment.java:144)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SecuritySettings$SecuritySubSettings.createPreferenceHierarchy(SecuritySettings.java:1084)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SecuritySettings$SecuritySubSettings.onCreate(SecuritySettings.java:1046)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.Fragment.performCreate(Fragment.java:2336)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:949)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.BackStackRecord.setLastIn(BackStackRecord.java:860)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.BackStackRecord.calculateFragments(BackStackRecord.java:900)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.BackStackRecord.run(BackStackRecord.java:728)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1578)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:563)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SettingsActivity.switchToFragment(SettingsActivity.java:1144)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SettingsActivity.onCreate(SettingsActivity.java:669)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.Activity.performCreate(Activity.java:6723)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: ... 9 more

02-23 16:10:56.935? 1394? 2357 I am_crash: [4876,0,com.android.settings,952647237,android.content.res.Resources$NotFoundException,Resource ID #0x0,ResourcesImpl.java,190]

二、

追蹤日志 ,發(fā)現(xiàn)

02-23 16:10:56.933? 4876? 4876 E AndroidRuntime: at com.android.settings.SecuritySettings$SecuritySubSettings.onCreate(SecuritySettings.java:1046)

這塊為空

三、查看代碼

private void createPreferenceHierarchy() {

? ? ? ? ? ? PreferenceScreen root = getPreferenceScreen();

? ? ? ? ? ? if (root != null) {

? ? ? ? ? ? ? ? root.removeAll();

? ? ? ? ? ? }

? ? ? ? ? ? root = null;

? ? ? ? ? ? final int resid = getResIdForLockUnlockSubScreen(getActivity(),

? ? ? ? ? ? ? ? ? ? new LockPatternUtils(getContext()),

? ? ? ? ? ? ? ? ? ? ManagedLockPasswordProvider.get(getContext(), MY_USER_ID));

? ? ? ? ? 1084 ? addPreferencesFromResource(resid);? 這個(gè)為空了

? ? ? ? ? ? // lock after preference

? ? ? ? ? ? mLockAfter = (TimeoutListPreference) findPreference(KEY_LOCK_AFTER_TIMEOUT);

? ? ? ? ? ? if (mLockAfter != null) {

? ? ? ? ? ? ? ? setupLockAfterPreference();

? ? ? ? ? ? ? ? updateLockAfterPreferenceSummary();

? ? ? ? ? ? }

? ? ? ? ? ? // visible pattern

? ? ? ? ? ? mVisiblePattern = (SwitchPreference) findPreference(KEY_VISIBLE_PATTERN);

四、解決方案,

一、增加int 類型的非空判斷處理


diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java

index 4876541..0ab2fb9 100644

--- a/src/com/android/settings/SecuritySettings.java

+++ b/src/com/android/settings/SecuritySettings.java

@@ -1083,6 +1083,12 @@

? ? ? ? ? ? final int resid = getResIdForLockUnlockSubScreen(getActivity(),

? ? ? ? ? ? ? ? ? ? new LockPatternUtils(getContext()),

? ? ? ? ? ? ? ? ? ? ManagedLockPasswordProvider.get(getContext(), MY_USER_ID));

+

+? ? ? ? ? ? if (resid == 0) {

+? ? ? ? ? ? ? ? finish();

+? ? ? ? ? ? ? ? return;

+? ? ? ? ? ? }

+

? ? ? ? ? ? addPreferencesFromResource(resid);

? ? ? ? ? ? // lock after preference


二、增加異常捕獲


? ? ? ? ? ? try {

? ? ? ? ? ? ? ? addPreferencesFromResource(resid);

? ? ? ? ? ? } catch (Exception e) {

? ? ? ? ? ? ? ? Log.e(TAG, "getResIdForLockUnlockSubScreen resid = "+resid);

? ? ? ? ? ? }


五、問題解決。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容