Fajar Khan
Fajar Khan

Reputation: 1002

Storing Integer value after app close and retrieve it

I have no clue how to fix this, please help!

I am creating a counter app that shows numbers every time user press a button. It starts from 0 and to a maximum of 9999. My problem is that after the user closes the app it again starts from 0 but what I want is display the last number the user pressed instead of 0 when user open app again. I tried many shared preference codes but none of them worked. Here is my code:

import android.content.Context;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private int x;
    Context context = this;
    MediaPlayer mp;

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


       final TextView number=(TextView) findViewById(R.id.numbers);
        ImageButton btn_count=(ImageButton) findViewById(R.id.btn_countn);
        ImageButton btn_reset=(ImageButton) findViewById(R.id.btn_resetn);
        mp = MediaPlayer.create(context, R.raw.button_press);

        number.setText(String.format("%04d", x)+"");

        btn_count.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                        mp = MediaPlayer.create(context, R.raw.button_press);
                    } mp.start();
                } catch(Exception e) { e.printStackTrace(); }
                x = x +1;
                number.setText(String.format("%04d", x)+"");
            }
        });

        btn_reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    if (mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                        mp = MediaPlayer.create(context, R.raw.button_press);
                    } mp.start();
                } catch(Exception e) { e.printStackTrace(); }
                x=0;
                number.setText(String.format("%04d", x)+"");
            }
        });
    }
}

Upvotes: 2

Views: 128

Answers (2)

Juan Cruz Soler
Juan Cruz Soler

Reputation: 8254

Using SharedPreferences you can do something like this:

public class MainActivity extends AppCompatActivity {

    private int x;
    SharedPreferences prefs;

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

        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        x = prefs.getInt("count", 0);

        final TextView number=(TextView) findViewById(R.id.numbers);
        ImageButton btn_count=(ImageButton) findViewById(R.id.btn_countn);
        ImageButton btn_reset=(ImageButton) findViewById(R.id.btn_resetn);

        number.setText(String.valueOf(x));

        btn_count.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                x++;
                prefs.edit().putInt("count", x).apply();
                number.setText(String.valueOf(x));
            }
        });

        btn_reset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                x=0;
                prefs.edit().putInt("count", x).apply();
                number.setText(String.valueOf(x));
            }
        });
    }
}

Upvotes: 0

You will need to use the Android Preferences for this:

How?

define when the app is getting closed and then call a method where you can write the actual value of the counter

Example

SharedPreferences buttonCounterValue = getSharedPreferences("counter", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = buttonCounterValue.edit();
editor.putInt("myCounter", i); //
editor.commit();

and when the app is open again you will need to call another method and read it back...

Example:

SharedPreferences buttonCounterValue = getPreferences(Activity.MODE_PRIVATE);
int  storedCounter = buttonCounterValue.getInt("myCounter", 0);

so validate what you store and check if the preference you get is 0, that means nothing was stored before, so you can beging the game from 0...

Upvotes: 1

Related Questions