-2

Here is the complete error log

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)

I am unable how should I initialize onPreferenceChangeListener, I also tried looking for code references to other places but couldn't figure out how they are initializing it. My whole code is at BatteryBarSettings.Java.

Thanks a lot in advance.

Priyanshu
  • 134
  • 1
  • 11

1 Answers1

0

1. XML Code - root_preferences.xml, path of the preference layout res/xml/root_preferences.xml

<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>

2. Initialize Preference

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;
        } );   

     }
}
  • Thanks a bunch dude. I figured that i was giving wrong app:key and thats why OnPreferenceChangeListener was going null. – Priyanshu Mar 27 '20 at 10:02