- Forum-Beiträge: 650
08.11.2024, 21:17:18 via Website
08.11.2024 21:17:18 via Website
Hallo zusammen
Meine App hat Optionen. Diese verwalte ich mit SharedPreference. Wenn ich bereits Optionen vorhanden sind, dann läuft die Methode "onSharedPreferenceChanged" ohne Probleme.
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Map<String, ?> map_key;
Object pool_key;
Preference wo = findPreference(key);
map_key = sharedPreferences.getAll();
if((wo != null) && (map_key != null)) {
pool_key = map_key.get(key);
if(pool_key.getClass().isInstance("class.java.lang.String")) {
wo.setSummary(sharedPreferences.getString(key, " - "));
}
}
}
Wenn ich aber eine neuinstallation mache und die Optionen das erste mal aufrufe, dann kommt ein hässlicher Fehler:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference
Wie kann ich verhindern, dass dieser Fehler nicht mehr auftritt?
package ch.robbisoft.sakristanhilfe;
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import java.util.Map;
public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences);
//Eingabe anzeigen
onSharedPreferenceChanged(getPreferenceManager().getSharedPreferences(), "key_termin_titel");
onSharedPreferenceChanged(getPreferenceManager().getSharedPreferences(), "key_terminbeschrieb");
onSharedPreferenceChanged(getPreferenceManager().getSharedPreferences(), "key_terminort");
onSharedPreferenceChanged(getPreferenceManager().getSharedPreferences(), "key_vor");
onSharedPreferenceChanged(getPreferenceManager().getSharedPreferences(), "key_nach");
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Map<String, ?> map_key;
Object pool_key;
Preference wo = findPreference(key);
map_key = sharedPreferences.getAll();
if((wo != null) && (map_key != null)) {
pool_key = map_key.get(key);
if(pool_key.getClass().isInstance("class.java.lang.String")) {
wo.setSummary(sharedPreferences.getString(key, " - "));
}
}
}
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
super.onPause();
}
}
Gruss Renato