SharedPreferences mehrfach

P

Paarn

Neues Mitglied
0
Hey Community,

ich habe eine Activity1 mit mehreren Arrays. Von denen soll jeweils der erste Wert des Arrays mit SharedPreferences "arraywert" geteilt werden. Wird also Array1 aufgerufen wird Wert1 in "arraywert" geschrieben. Bei Array2 Wert2 usw.
Jetzt möchte ich in einer anderen Acitivity, Activity2, den gespeicherten Wert zu einem vorhandenen addieren.
Activity1 soll mehrmals aufgerufen werden und auch dann andere Arrays und diese dann in Activity2 immer wieder zum Wert hinzu addiert werden.
"arraywert" soll überschrieben und in Activity2 zwischengespeichert werden.
Jedoch wird nur ein Wert addiert, der zweite nicht mehr. Bzw es wird dann nur noch der zweite Wert addiert.

Ideen?
 
Also jetzt mal etwas deutlicher, :) mir sind die vielen Arrays xD.
Zeig mal dein Quellcode, dann weiß ich wenigstens den aktuellen stand und kann mir mehr Klarheit machen. Grüße wdew
 
Habe ich mir gedacht, dass es etwas unverständlich ist.

Hier mein Quellcode:
Activity1
Code:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.detail);
      getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.button));
        
        String [] dortmund= getResources().getStringArray(R.array.dortmund);
        String [] bochum= getResources().getStringArray(R.array.bochum);
        String [] essen= getResources().getStringArray(R.array.essen);
        String [] duisburg= getResources().getStringArray(R.array.duisburg);

Bundle extras = getIntent().getExtras();
        auswahl = extras.getString("staedte");
                
        TextView titel = (TextView) findViewById(R.id.detail_title);
        titel.setText(auswahl);
        TextView detail_portion = (TextView) findViewById(R.id.einwohner);
        TextView detail_energie = (TextView) findViewById(R.id.flaeche);
        TextView detail_eiweiss = (TextView) findViewById(R.id.buergermeister);

settings = getSharedPreferences(PREFS_NAME, 0);
        editor = settings.edit();
        
        if (auswahl.equals("dortmund"))
        {
            einwohner.setText(dortmund[0]);
            flaeche.setText(dortmund[1]);
            buergermeister.setText(dortmund[2]);
            editor.putInt("Einwohner", dortmund[0]).apply();
        }
        
        if (auswahl.equals("bochum"))
        {
            einwohner.setText(bochum[0]);
            flaeche.setText(bochum[1]);
            buergermeister.setText(bochum[2]);
            editor.putInt("Einwohner", bochum[0]).apply();
        }
        
        if (auswahl.equals("essen"))
        {
            einwohner.setText(essen[0]);
            flaeche.setText(essen[1]);
            buergermeister.setText(essen[2]);
            editor.putInt("Einwohner", essen[0]).apply();
        }
        
        if (auswahl.equals("duisburg"))
        {
            einwohner.setText(duisburg[0]);
            flaeche.setText(duisburg[1]);
            buergermeister.setText(duisburg[2]);
            editor.putInt("Einwohner", duisburg[0]).apply();
        }

Activity2
Code:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        
        settings = getSharedPreferences(PREFS_NAME, 0);
        int einwohner= settings.getInt("Einwohner", 0);
        TextView einwohner_ausgabe= (TextView) findViewById(R.id.ausgabe);
        einwohner_ausgabe.setText(Int.toString(einwohner));


Die Einwohner sollen bei 0 anfangen und immer auf addiert werden, wenn eine Stadt ausgewählt wird.

Bsp:
Einwohner = 0 -> Auswahl Dortmund -> Einwohner + Einwohner Dortmund -> Auswahl Essen -> (Einwohner + Einwohner Dortmund) + Einwohner Essen .....


Ich hoffe jetzt ist es verständlicher.
 
Hallo,
Activity1 und Activity2 sind schon ziemlich kryptische Namen. Weiß nicht ob du dir damit selbst einen Gefallen tust (jedenfalls wenn die Projekte größer werden solltest du dir hier nochmal aussagekräftigere Namen einfallen lassen).

SharedPrefs lassen sich definitiv überall auslesen und auch wieder beschreiben, jedenfalls wenn du die gleiche Datei ansprichst.

Vielleicht hast du einfach nur vergessen, dass in Activity2 der Wert zu erst ausgelesen werden muss und dann mittels "+=" erhöht wird und dann wieder gespeichert wird.
Prüfe, ob du überall apply() nutzt. Vielleicht wurde irgendwo nur dieser Aufruf vergessen?

Anderer Tipp, wie du selbst recht einfach die Logik des Codes innerhalb der Activities testen kannst:
Log.d("Dein Tag", "Mein Wert: " + einwohnerzahlXY);

Zur Not poste nochmal deinen (möglichst vollständigen) Code aus Activity2...

Weiterer Tipp: MODE_PRIVATE ist zwar die 0, aber trotzdem ist der Code besser lesbar.
Und: Wenn du für die SharedPrefs schon eine Konstante "PREF_NAME" nimmst, könntest du das gleiche auch für den "Einwohner" machen. ;) Manchmal ist es ja nur ein Tippfehler.
An sich sieht dein Code gut aus (jedenfalls so mein Eindruck als ich ihn eben überflogen habe), wie gesagt mit Logcat kannst du Schusseligkeitsfehler schnell ausfindig machen.
 
  • Danke
Reaktionen: Paarn
Ah. Sorry. Die Activities heissen naturlich anders. Activity2 = MainActivity und Activity1 = DetailActivity.

Danke für deine Tipps. Werde ich beherzigen. Auch das mit Log werde ich mal versuchen.
Aber ich glaube ich weiß jetzt wo der Fehler liegt. Es wird in meinem Code immer nur der ausgewählte Wert übernommen und der vorherige verworfen.
Wahrscheinlich weil ich einfach nur überschreibe. Ich schreibe den Wert in Activity1 (DetailActivity) nur in die SharedPreferences ohn vorher auszulesen und den alten hinzu addieren. Werde ich morgen mal testen.

Danke dir.


EDIT: Es funktionert. :)
 
Zuletzt bearbeitet:

Ähnliche Themen

D
Antworten
9
Aufrufe
1.731
jogimuc
J
B
Antworten
27
Aufrufe
2.162
Braesident
B
D
Antworten
6
Aufrufe
1.239
DmanT
D
Zurück
Oben Unten