Reputation: 137
I am brand new to android development. I am trying to make a simple app to learn a little bit about how things work. I got the basic app to work, which just has a few TextView elements that are incremented and decremented via buttons. It is a basic scorekeeper.
The problem I am having is that anytime the program is closed, the screen is rotated or turns off the data is lost.
I am trying to implement sharedpreferences to "save" the data. There are 3 variables to save Home_Score, Visitor_Score, and Inning_Number.
I am stuck because the data does not resume correctly and I cannot figure out what is happening.
Inning_Number = 1
Home_Score = 2
Visitor_Score = 3
onResume the data is displayed:
Inning_Number = 0
Home_Score = 1
Visitor_Score = 3
It appears that the value of the first field is moved to the second field and the third field is correct.
I have tried this a number of ways and the result is the same. I thought I had mixed up variables but if I did I am not seeing it. I stuck and am hoping someone has an answer.
Thanks in advance!
public class MainActivity extends AppCompatActivity {
// Create Variables to hold Field Data
Button btnIncrementHome;
Button btnDecrementHome;
Button btnIncrementVisitor;
Button btnDecrementVisitor;
Button btnIncrementInning;
Button btnDecrementInning;
Button btnReset;
TextView txthomeScore;
TextView txtvisitorScore;
TextView txtinningNumber;
//private SharedPreferences score;
private static final String Game_Score_FileName = "gameScore";
private String Home_Score = "txthomeScore";
private String Visitor_Score = "txtvisitorScore";
private String Inning_Number = "txtinningNumber";
SharedPreferences score;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Set default value in SharedPreferences file
score = getSharedPreferences(Game_Score_FileName, Context.MODE_PRIVATE);
//txthomeScore.setText(score.getString("Home_Score", "0"));
// txtvisitorScore.setText(score.getString("Visitor_Score", "0"));
// txtinningNumber.setText(score.getString("Inning_Number", "0"));
// Get Values of the Form Fields
btnIncrementHome = findViewById(R.id.buttonIncrementHome);
btnDecrementHome = findViewById(R.id.buttonDecrementHome);
btnIncrementVisitor = findViewById(R.id.buttonIncrementVisitor);
btnDecrementVisitor = findViewById(R.id.buttonDecrementVisitor);
btnIncrementInning = findViewById(R.id.buttonIncrementInning);
btnDecrementInning = findViewById(R.id.buttonDecrementInning);
btnReset = findViewById(R.id.buttonReset);
txthomeScore = findViewById(R.id.homeScore);
txtvisitorScore = findViewById(R.id.visitorScore);
txtinningNumber = findViewById(R.id.inningNumber);
btnIncrementHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String homeScoreValue = txthomeScore.getText().toString();
int inthomeScoreValue = Integer.parseInt(homeScoreValue);
inthomeScoreValue++;
txthomeScore.setText(String.valueOf(inthomeScoreValue));
}
});
btnDecrementHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String homeScoreValue = txthomeScore.getText().toString();
int inthomeScoreValue = Integer.parseInt(homeScoreValue);
inthomeScoreValue--;
if (inthomeScoreValue < 0) {
inthomeScoreValue=0;
}
txthomeScore.setText(String.valueOf(inthomeScoreValue));
}
});
btnIncrementVisitor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String visitorScoreValue = txtvisitorScore.getText().toString();
int intvisitorScoreValue = Integer.parseInt(visitorScoreValue);
intvisitorScoreValue++;
txtvisitorScore.setText(String.valueOf(intvisitorScoreValue));
}
});
btnDecrementVisitor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String visitorScoreValue = txtvisitorScore.getText().toString();
int intvisitorScoreValue = Integer.parseInt(visitorScoreValue);
intvisitorScoreValue--;
if (intvisitorScoreValue < 0) {
intvisitorScoreValue=0;
}
txtvisitorScore.setText(String.valueOf(intvisitorScoreValue));
}
});
btnIncrementInning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String inningNumberValue = txtinningNumber.getText().toString();
int intinningNumberValue = Integer.parseInt(inningNumberValue);
intinningNumberValue++;
txtinningNumber.setText(String.valueOf(intinningNumberValue));
}
});
btnDecrementInning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String inningNumberValue = txtinningNumber.getText().toString();
int intinningNumberValue = Integer.parseInt(inningNumberValue);
intinningNumberValue--;
if (intinningNumberValue < 0) {
intinningNumberValue=0;
}
txtinningNumber.setText(String.valueOf(intinningNumberValue));
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
txthomeScore.setText(String.valueOf(0));
txtvisitorScore.setText(String.valueOf(0));
txtinningNumber.setText(String.valueOf(0));
}
});
}
@Override
protected void onPause(){
super.onPause();
String homeScore = txthomeScore.getText().toString();
String visitorScore = txtvisitorScore.getText().toString();
String inningNumber = txtinningNumber.getText().toString();
score = getSharedPreferences(Game_Score_FileName, MODE_PRIVATE);
SharedPreferences.Editor editor = score.edit();
editor.putString("Inning_Number",inningNumber);
editor.putString("Visitor_Score",visitorScore);
editor.putString("Home_Score",homeScore);
editor.apply();
}
@Override
protected void onResume(){
super.onResume();
score = getSharedPreferences(Game_Score_FileName, MODE_PRIVATE);
String Home = score.getString("Home_Score","0");
String Visitor = score.getString("Visitor_Score","0");
String Inning = score.getString("Inning_Number","1");
txthomeScore.setText(Home);
txtvisitorScore.setText(Visitor);
txthomeScore.setText(Inning);
}
}
Upvotes: 1
Views: 68
Reputation: 516
Replace your activity code
public class MainActivity extends AppCompatActivity {
// Create Variables to hold Field Data
Button btnIncrementHome;
Button btnDecrementHome;
Button btnIncrementVisitor;
Button btnDecrementVisitor;
Button btnIncrementInning;
Button btnDecrementInning;
Button btnReset;
TextView txthomeScore;
TextView txtvisitorScore;
TextView txtinningNumber;
//private SharedPreferences score;
private static final String Game_Score_FileName = "gameScore";
private String Home_Score = "txthomeScore";
private String Visitor_Score = "txtvisitorScore";
private String Inning_Number = "txtinningNumber";
SharedPreferences score;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Set default value in SharedPreferences file
score = getSharedPreferences(Game_Score_FileName, Context.MODE_PRIVATE);
// Get Values of the Form Fields
btnIncrementHome = (Button) findViewById(R.id.btnIncrementHome);
btnDecrementHome =(Button) findViewById(R.id.btnDecrementHome);
btnIncrementVisitor =(Button) findViewById(R.id.btnIncrementVisitor);
btnDecrementVisitor = (Button)findViewById(R.id.btnDecrementVisitor);
btnIncrementInning =(Button) findViewById(R.id.btnIncrementInning);
btnDecrementInning =(Button) findViewById(R.id.btnDecrementInning);
btnReset = (Button)findViewById(R.id.btnReset);
txthomeScore = (TextView) findViewById(R.id.txthomeScore);
txtvisitorScore =(TextView) findViewById(R.id.txtvisitorScore);
txtinningNumber =(TextView) findViewById(R.id.txtinningNumber);
txthomeScore.setText(score.getString("Home_Score", "0"));
txtvisitorScore.setText(score.getString("Visitor_Score", "0"));
txtinningNumber.setText(score.getString("Inning_Number", "0"));
btnIncrementHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String homeScoreValue = txthomeScore.getText().toString();
int inthomeScoreValue = Integer.parseInt(homeScoreValue);
inthomeScoreValue++;
txthomeScore.setText(String.valueOf(inthomeScoreValue));
}
});
btnDecrementHome.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String homeScoreValue = txthomeScore.getText().toString();
int inthomeScoreValue = Integer.parseInt(homeScoreValue);
inthomeScoreValue--;
if (inthomeScoreValue < 0) {
inthomeScoreValue=0;
}
txthomeScore.setText(String.valueOf(inthomeScoreValue));
}
});
btnIncrementVisitor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String visitorScoreValue = txtvisitorScore.getText().toString();
int intvisitorScoreValue = Integer.parseInt(visitorScoreValue);
intvisitorScoreValue++;
txtvisitorScore.setText(String.valueOf(intvisitorScoreValue));
}
});
btnDecrementVisitor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String visitorScoreValue = txtvisitorScore.getText().toString();
int intvisitorScoreValue = Integer.parseInt(visitorScoreValue);
intvisitorScoreValue--;
if (intvisitorScoreValue < 0) {
intvisitorScoreValue=0;
}
txtvisitorScore.setText(String.valueOf(intvisitorScoreValue));
}
});
btnIncrementInning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String inningNumberValue = txtinningNumber.getText().toString();
int intinningNumberValue = Integer.parseInt(inningNumberValue);
intinningNumberValue++;
txtinningNumber.setText(String.valueOf(intinningNumberValue));
}
});
btnDecrementInning.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String inningNumberValue = txtinningNumber.getText().toString();
int intinningNumberValue = Integer.parseInt(inningNumberValue);
intinningNumberValue--;
if (intinningNumberValue < 0) {
intinningNumberValue=0;
}
txtinningNumber.setText(String.valueOf(intinningNumberValue));
}
});
btnReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
txthomeScore.setText(String.valueOf(0));
txtvisitorScore.setText(String.valueOf(0));
txtinningNumber.setText(String.valueOf(0));
}
});
}
@Override
protected void onPause(){
super.onPause();
String homeScore = txthomeScore.getText().toString();
String visitorScore = txtvisitorScore.getText().toString();
String inningNumber = txtinningNumber.getText().toString();
score = getSharedPreferences(Game_Score_FileName, MODE_PRIVATE);
SharedPreferences.Editor editor = score.edit();
editor.putString("Inning_Number",inningNumber);
editor.putString("Visitor_Score",visitorScore);
editor.putString("Home_Score",homeScore);
editor.apply();
}
@Override
protected void onResume(){
super.onResume();
score = getSharedPreferences(Game_Score_FileName, MODE_PRIVATE);
String Home = score.getString("Home_Score","0");
String Visitor = score.getString("Visitor_Score","0");
String Inning = score.getString("Inning_Number","1");
txthomeScore.setText(Home);
txtvisitorScore.setText(Visitor);
txtinningNumber.setText(Inning);
}
}
Upvotes: 0
Reputation: 12953
You are setting home score twice
txthomeScore.setText(Home); <----
txtvisitorScore.setText(Visitor);
txthomeScore.setText(Inning); <----
replace with
txthomeScore.setText(Home);
txtvisitorScore.setText(Visitor);
txtinningNumber.setText(Inning);
And as you are new to Android, as a general standard use camelCase
for local variables
Upvotes: 3