Java 在空引用对象上调用setOnPreferenceChangeListener
这是完整的错误日志Java 在空引用对象上调用setOnPreferenceChangeListener,java,android,Java,Android,这是完整的错误日志 03-27 08:08:30.264 D/SubSettings( 7079): Launching fragment com.sakura.settings.fragments.BatterybarSettings 03-27 08:08:30.275 D/AndroidRuntime( 7079): Shutting down VM 03-27 08:08:30.275 E/AndroidRuntime( 7079): FATAL EXCEPTION: main 03-2
03-27 08:08:30.264 D/SubSettings( 7079): Launching fragment com.sakura.settings.fragments.BatterybarSettings
03-27 08:08:30.275 D/AndroidRuntime( 7079): Shutting down VM
03-27 08:08:30.275 E/AndroidRuntime( 7079): FATAL EXCEPTION: main
03-27 08:08:30.275 E/AndroidRuntime( 7079): Process: com.android.settings, PID: 7079
03-27 08:08:30.275 E/AndroidRuntime( 7079): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.preference.Preference.setOnPreferenceChangeListener(androidx.preference.Preference$OnPreferenceChangeListener)' on a null object reference
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.os.Handler.dispatchMessage(Handler.java:107)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.os.Looper.loop(Looper.java:214)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at android.app.ActivityThread.main(ActivityThread.java:7355)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at java.lang.reflect.Method.invoke(Native Method)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
03-27 08:08:30.275 E/AndroidRuntime( 7079): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.preference.Preference.setOnPreferenceChangeListener(androidx.preference.Preference$OnPreferenceChangeListener)' on a null object reference
03-27 08:08:30.275 E/AndroidRuntime( 7079): at com.sakura.settings.fragments.BatterybarSettings.onCreate(BatterybarSettings.java:110)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at androidx.fragment.app.Fragment.performCreate(Fragment.java:2596)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:831)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at androidx.fragment.app.FragmentTransition.addToFirstInLastOut(FragmentTransition.java:1197)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at androidx.fragment.app.FragmentTransition.calculateFragments(FragmentTransition.java:1080)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at androidx.fragment.app.FragmentTransition.startTransitions(FragmentTransition.java:119)
03-27 08:08:30.275 E/AndroidRuntime( 7079): at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1853)
我不知道应该如何初始化PreferenceChangeListener,我也尝试过寻找其他地方的代码引用,但不知道它们是如何初始化的。我的全部密码都在
先谢谢你 1。XML代码-root_preferences.XML,首选项布局res/XML/root_preferences.XML的路径
对不起,这没用。我已经知道如何在NPE上工作,但我不知道如何处理上面的一个。我已经知道如何在NPE上工作了。您发布的是一个空指针异常。你还没有为我们发布任何代码来帮助你,所以这是我们能做的最好的了。谢谢,问题解决了。谢谢一群家伙。我认为我给出了错误的app:key,这就是为什么OnPreferenceChangeListener变为空。
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory app:title="MyCategory">
<EditTextPreference
app:key="myPrefID"
app:title="name"
android:defaultValue="xyz"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource( R.xml.root_preferences, rootKey );
EditTextPreference myPref = findPreference("myPrefID");
myPref.setOnPreferenceChangeListener( (preference, newValue) ->{
//newValue contains changed value
Toast.makeText( getContext(),newValue.toString(), Toast.LENGTH_SHORT ).show();
return false;
} );
}
}