Java Android首选项为空例外

Java Android首选项为空例外,java,android,android-preferences,Java,Android,Android Preferences,有人能帮我吗 我是安卓的乞丐,我不知道我的错在哪里 提前谢谢 错误日志 01-22 11:45:32.722 13037-13037/com.example.android.sunshine.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.sunshine.app, PID: 13037 java.lang.RuntimeException: Unable to start activity Com

有人能帮我吗

我是安卓的乞丐,我不知道我的错在哪里

提前谢谢

错误日志

01-22 11:45:32.722 13037-13037/com.example.android.sunshine.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.android.sunshine.app, PID: 13037
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.sunshine.app/com.example.android.sunshine.app.SettingsActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setOnPreferenceChangeListener(android.preference.Preference$OnPreferenceChangeListener)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2491)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2564)
at android.app.ActivityThread.access$800(ActivityThread.java:170)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1441)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5576)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.preference.Preference.setOnPreferenceChangeListener(android.preference.Preference$OnPreferenceChangeListener)' on a null object reference
at com.example.android.sunshine.app.SettingsActivity.bindPreferenceSummaryToValue(SettingsActivity.java:40)
at com.example.android.sunshine.app.SettingsActivity.onCreate(SettingsActivity.java:30)
at android.app.Activity.performCreate(Activity.java:6041)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2437)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2564) 
at android.app.ActivityThread.access$800(ActivityThread.java:170) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1441) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5576) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751) 
strings.xml

这是我的pref_general.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    >

    <EditTextPreference
        android:key="pref_location_key"
        android:title="@string/pref_location_label"
        android:defaultValue="@string/pref_location_default"
        android:inputType="text"
        android:singleLine="true" />
</PreferenceScreen>

我尝试了一些方法来解决这个问题,但没有成功。当用户按下“设置”按钮,然后我的应用程序关闭并显示错误消息时,就会发生此错误。

查看上图,查看
bindPreferenceSummaryToValue
中的
preference
对象是否为空。更准确地说,这条线

preference.setOnPreferenceChangeListener
如何调试

  • 确保FindReference实际返回了一些内容,而不是空值。在那里使用log语句来查看
  • 如果第一步为空值,请检查pref_location_键是否实际存在,然后将其传递给bind方法
  • 请阅读此函数的javadoc


  • 谢谢,问题解决了!我刚刚在pref_general.xml中的键之前插入了@string/。
    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
        >
    
        <EditTextPreference
            android:key="pref_location_key"
            android:title="@string/pref_location_label"
            android:defaultValue="@string/pref_location_default"
            android:inputType="text"
            android:singleLine="true" />
    </PreferenceScreen>
    
    preference.setOnPreferenceChangeListener