SharedPreferences in externer Klasse auslagern

M

Manuel1805

Ambitioniertes Mitglied
2
Hallo zusammen,

ich möchte in meiner App verschiedene Abfrageergebnisse speichern. Bisher hatte ich die SharedPreferences in meiner Fragment-Klasse implementiert. Da ich viele Fragmentklassen mit Speicheroption nutzen möchte, versuche ich den Code nur einmal zu schreiben. Dieser soll in einer externen Klasse landen. Leider bekomme ich immer eine NullPointerException :sad:

Kann mir jemand sagen, wo mein Fehler liegt, bzw. ggfs. wie ich diesen korrigieren kann?

Hier die neue Speicherklasse:
Code:
import android.app.Fragment;
import android.content.Context;
import android.content.SharedPreferences;

public class SpeichernUndLaden extends Fragment {


	SharedPreferences prefs;

public void speichern(String Aufgabe, String Ergebnis) {
		prefs = getActivity().getPreferences(Context.MODE_PRIVATE);
		SharedPreferences.Editor meinEditor = prefs.edit();
		meinEditor.putString(Aufgabe, Ergebnis);
		meinEditor.commit();

	}
  
  public String laden(String Aufgabe) {
		prefs = getActivity().getPreferences(Context.MODE_PRIVATE); 
		return (String) prefs.getString(Aufgabe, "unbeantwortet");

	}


Hier die Klasse die die Speicherklasse verwendet
Code:
public class SinnPageAdapter extends PageAdapter { 
  
  SpeichernUndLaden speichernundladen = new SpeichernUndLaden();
  
...

     private OnClickListener frage1 = new OnClickListener() {

		@Override
		public void onClick(View v) {
			if (v == antwort11) { // richtig
				richtigToast();
				speichernundladen.speichern("Aufgabe1", "richtig");
			} else if (v == antwort12) { // falsch
				falschToast("Richtig: Antwort 1");
				speichernundladen.speichern("Aufgabe1", "falsch");
        }
	};
}
...

Die java.lang.NullPointerException tritt auf bei der Mehtode speichern Zeile Prefs.
 
Moin,

wenn ich das richtig sehe ist die Initialisierung des SharedPreferences Objektes falsch.
ich würde das folgendermaßen machen:

Code:
public static void loadPreference(Activity ac, String aufgabe)
{   
  prefs = ac.getSharedPreferences(<Name>, 0);
  return (String) prefs.getString(Aufgabe, "unbeantwortet");
}

public static void savePreference(Activity ac, String Aufgabe, String Ergebnis)
{   
   prefs = ac.getSharedPreferences(<Name>, 0);
   SharedPreferences.Editor meinEditor = prefs.edit();
   meinEditor.putString(Aufgabe, Ergebnis);
   meinEditor.commit();
}

Gruß
lenny
 
Ich mache mal Werbung für meine Library esperandro

Das vereinfacht den Umgang mit SharedPreferences extrem. Wenn noch fragen sind einfach fragen.
 
Hallo Lenny,

vielen Dank für Deine Info.

Die Methoden:
  • loadPreference und
  • savePreference

haben in der Signatur jeweils eine Activity. Das Problem, was ich jetzt habe, ist dass ich lediglich eine MainActivity besitze; diese initialisiert nur die Fragments. Ich denke Fragments sollten hier besser übergeben werden, oder? Und wenn ja, wie mache ich das in der Methode, in der ich die Speichernklasse bzw. Speichern aufrufe?

speichernundladen.speichern(<Fragment...??>,"Aufgabe1", "richtig");

Gruß

Manuel
 

Ähnliche Themen

D
Antworten
9
Aufrufe
1.789
jogimuc
J
D
Antworten
23
Aufrufe
2.685
Data2006
D
OnkelLon
Antworten
13
Aufrufe
2.013
OnkelLon
OnkelLon
Zurück
Oben Unten