在关于修改SettingsActivity 的Udacity Android开发视频中,我按照这个要点实现了代码但是在Android Monitor上收到错误说
03-18 10:52:59.625:E/AndroidRuntime(2520):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.android.sunshine/com.example.android.sunshine.SettingsActivity}:java.lang .NullPointerException:尝试在空对象引用上调用虚方法'void android.preference.Preference.setOnPreferenceChangeListener(android.preference.Preference $ OnPreferenceChangeListener)'
相关代码是
private void bindPreferenceSummaryToValue(Preference preference) {
// Set the listener to watch for value changes.
preference.setOnPreferenceChangeListener(this);
// Trigger the listener immediately with the preference's
// current value.
onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
Run Code Online (Sandbox Code Playgroud)
所以它看起来this是未定义的,是吗?
该preference传递在这种情况下空.真正的罪魁祸首可能是您编写引用的XML布局文件中缺少的条目.
找到它的简单方法是查看堆栈跟踪,并从您SettingsActivity或其中被引用的Activity中查看它所调用的字段.例如:
bindPreferenceSummaryToValue(findPreference("mytypes"));
Run Code Online (Sandbox Code Playgroud)
看看enabled上面的情况是否正在添加到您的布局中,如下所示:
<ListPreference
android:entries="@array/pref_my_types"
android:entryValues="@array/pref_my_values"
android:key="mytypes"
android:title="MyTypes"/>
Run Code Online (Sandbox Code Playgroud)
如果缺少它,它将抛出一个NPE并findPreference("mytypes")返回null.
| 归档时间: |
|
| 查看次数: |
3590 次 |
| 最近记录: |