首先,我很抱歉,如果这是一个副本,我搜索,但没有找到答案。
我试图在多个活动中保持得分。用户从MainActivity开始,选择要回答的问题,然后重定向到该活动。用户将获得一个正确答案的积分,并返回给MainActivity以选择一个新的问题。
它是正确评分的问题,但它没有保存之间的问题得分。
主活性
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("score", userPoints);
editor.commit();
};Q1(每个问题的逻辑相同)。它运行时按一下按钮)
private SharedPreferences settings;
private int userPoints;
private int points;
public void submitAnswer (View view) {
if (correctAnswer.isChecked()) {
userPoints = userPoints + 1;
} else {
userPoints = userPoints;
}
settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
points = settings.getInt("score", userPoints);
Toast.makeText(this, "Answer saved", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Q1.this, MainActivity.class);
startActivity(intent);
}我对这件事很陌生,我知道我错过了一些东西,我只是不知道它是什么。任何帮助都是非常感谢的。
编辑*
这是呼叫得分的按钮,它仍然只计算6分中的1个。
private int userPoints;
TextView pointsAwarded;
ImageButton home;
Button check;
int points;
SharedPreferences settings;
check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
points = settings.getInt("score", userPoints);
pointsAwarded.setText(String.valueOf(points));
}
});发布于 2018-05-31 01:48:34
实际上,代码有一些错误。首先,您要将score保存在MainActivity中,而不是阅读它。您正在以score代替submitAnswer阅读或编辑它。
在处理SharedPreferences时,我通常是悲观的,所以我检查键是否已经用contains()设置了。
private int points;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
if(settings.contains("score"){
points = settings.getInt("score", userPoints);
}
else{
Log.e(TAG, "No score yet!");
SharedPreferences.Editor editor = settings.edit();
editor.putInt("score", 0);
editor.commit();
}
}现在,在问题活动中,您可以从SharedPreferences读取当前点,并更新值并保存回SharedPreferences。
public void submitAnswer (View view) {
if (correctAnswer.isChecked()) {
SharedPreferences settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
if(settings.contains("score"){
int points = settings.getInt("score", 0);
points++;
SharedPreferences.Editor editor = settings.edit();
editor.putInt("score", points);
editor.commit();
Toast.makeText(this, "Answer saved : points = " + points, Toast.LENGTH_SHORT).show();
}
else{
Log.e(TAG, "No score yet!");
}
}
else{
Toast.makeText(this, "Wrong Answer", Toast.LENGTH_SHORT).show();
}
// There is no need to start the MainActivity through a new Intent just call finish();
finish();
//... and you return to the Activity that is at the top of the stack.
//Intent intent = new Intent(Q1.this, MainActivity.class);
//startActivity(intent);
}发布于 2018-05-31 01:31:20
```javascriptif (correctAnswer.isChecked()) {
userPoints = userPoints + 1;}
``` after this , u should save userPoints. maybe you forget.发布于 2018-05-31 05:11:39
您必须将当前用户点添加到保存点中,然后在添加后保存它:
private SharedPreferences settings;
private int userPoints;
private int points;
public void submitAnswer (View view) {
if (correctAnswer.isChecked()) {
userPoints = userPoints + 1;
} else {
userPoints = userPoints;
}
settings = getSharedPreferences("userScore", Context.MODE_PRIVATE);
points = settings.getInt("score", userPoints);
userPoints = userPoints + points ; // addition of current userpoints with saved points
// Now save this points
SharedPreferences.Editor editor = settings.edit();
editor.putInt("score", userPoints );
editor.commit();
Toast.makeText(this, "Answer saved", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Q1.this, MainActivity.class);
startActivity(intent);
}https://stackoverflow.com/questions/50615347
复制相似问题