Speicher Funktion klappt nicht

  • Hallo zusammen,


    ich hoffe Ihr könnt mir weiterhelfen:


    Ich wollte einen Zähler programmieren, welcher nach einem erneuten Start immernoch auf der Zahl steht, wie beim schließen.
    Außerdem soll ein extra View den Counter anzeigen, welcher beim letzten Reset (Über Button) stand.
    Das speichern an sich klappt. Nur sobald ich den Hauptcounter mit dem Count_Button weiter zählen lassen will, fängt dieser wieder von 0 an.
    Ich finde leider den Fehler nicht. Gibt es eventuell eine bessere Speichermethode? Hat jemand ne Idee?


    Hier der Code:


    package com.example.flava.counter;


    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.design.widget.FloatingActionButton;
    import android.support.design.widget.Snackbar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.View;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;


    import java.util.Calendar;


    public class MainActivity extends AppCompatActivity {


    int counter, counter_alt;
    Button count_button, back_button, reset_button;
    TextView anzeige1, anzeige2, anzeige3;
    SharedPreferences speicher;
    SharedPreferences.Editor editor;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    count_button = (Button) findViewById(R.id.count_button);
    back_button = (Button) findViewById(R.id.back_button);
    reset_button = (Button) findViewById(R.id.reset_button);
    anzeige1 = (TextView) findViewById(R.id.anzeige1);
    anzeige2 = (TextView) findViewById(R.id.anzeige2);
    anzeige3 = (TextView) findViewById(R.id.last_counter);


    speicher = getApplicationContext().getSharedPreferences("Daten", 0);
    editor = speicher.edit();


    TextLaden("Data1", counter);
    anzeige2.setText(String.valueOf(speicher.getString("Data1", null)));
    TextLaden("Data2", counter_alt);
    anzeige3.setText(String.valueOf(speicher.getString("Data2", null)));
    count_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    counter++;
    TextSpeichern("Data2", String.valueOf(counter_alt));
    TextSpeichern("Data1", String.valueOf(counter));
    anzeige2.setText(String.valueOf(counter));
    }
    });


    back_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    if(counter > 0) {
    counter--;
    TextSpeichern("Data1", String.valueOf(counter));
    anzeige2.setText(String.valueOf(counter));
    }
    else{
    Rücksetzen();
    anzeige2.setText(String.valueOf(counter));
    }
    }
    });


    reset_button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    counter_alt = counter;
    TextSpeichern("Data2", String.valueOf(counter_alt));
    anzeige3.setText(String.valueOf(counter_alt));
    Rücksetzen();
    TextSpeichern("Data1", String.valueOf(counter));
    anzeige2.setText(String.valueOf(counter));
    }
    });


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
    .setAction("Action", null).show();
    }
    });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();


    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
    return true;
    }


    return super.onOptionsItemSelected(item);
    }


    private void TextLaden(String name, int inhalt ){
    if(speicher.getString(name, null) != null){
    inhalt = Integer.valueOf(speicher.getString(name, null));
    }


    }
    private void TextSpeichern(String name, String inhalt){
    if(inhalt != null) {
    editor.putString(name, inhalt);
    editor.commit();
    Toast.makeText(this, "Hallo", Toast.LENGTH_LONG);
    }
    }
    private void Rücksetzen(){
    counter = 0;
    }
    }

  • Ich hab mal schnell drüber geschaut und mir ist aufgefallen das dein "private void TextLaden(String name, int inhalt )" falsch ist.
    Du gibst ja den Parameter "inhalt" mit rüber aber du weißt wenn du die Variable in der Funktion veränderst, veränderst du ihn nur in der Funktion und nicht außerhalb das heißt, wenn du aus der Funktion raus kommst ist die Variable die du mitgegeben hast auf dem Wert den er schon vor der Funktion hatte.


    Ich hoffe du hast mich verstanden :D

  • So Funktioniert des ich hab es getestet ;)
    Dein TextLaden hat jetzt nur einen Übergabeparameter und gibt den Wert der darin steht einfach nur zurück :thumbup:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!