我不知道什么是错的,但是我无法在我的应用程序中保存/加载得分。在玩游戏时,得分显示得恰到好处,但它并没有保存。每次重新打开应用程序时,分数都会重置为0.每当获得特定图像时,玩家都会收到积分。
以下是代码的一部分:
布局:
<TextView
android:id="@+id/scoreLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Score : 0"
android:textSize="20sp"
android:textColor="@android:color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.005"
app:layout_constraintHorizontal_bias="0.849" />
主要活动:
public class MainActivity extends AppCompatActivity {
TextView scoreLabel;
int score = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scoreLabel = (TextView) findViewById(R.id.scoreLabel);
final ImageView battleLogo = (ImageView) findViewById(R.id.battleLogo);
final ImageView crateImage = (ImageView) findViewById(R.id.crateImage);
final ImageView prizeImage = (ImageView) findViewById(R.id.prizeImage);
final Button openButton = (Button) findViewById(R.id.openButton);
final Button receiveButton = (Button) findViewById(R.id.receiveButton);
final Resources res = getResources();
prizeImage.setVisibility(View.GONE);
receiveButton.setVisibility(View.GONE);
//setting preferences
SharedPreferences myScore = this.getSharedPreferences("MyScore", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myScore.edit();
editor.putInt("score", score);
editor.commit();
openButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Random prize
int[] cards = {R.drawable.card1, R.drawable.card2, R.drawable.card3, R.drawable.card4, R.drawable.card5,
R.drawable.card6, R.drawable.card7, R.drawable.card8, R.drawable.card9, R.drawable.card10, R.drawable.card11,
R.drawable.card12, R.drawable.card13, R.drawable.card14, R.drawable.card15, R.drawable.card16,
R.drawable.card17, R.drawable.card18, R.drawable.card19, R.drawable.card20, R.drawable.card21,
R.drawable.card22, R.drawable.card23, R.drawable.card24, R.drawable.card25, R.drawable.card26,
R.drawable.card27, R.drawable.card28, R.drawable.card29, R.drawable.card30, R.drawable.card31,
R.drawable.card32, R.drawable.card33, R.drawable.card34, R.drawable.card35};
Random r = new Random();
int n = r.nextInt(35);
switch (n) {
case 0:
score += 10;
break;
case 1:
score += 20;
break;
case 3:
score += 30;
break;
}
scoreLabel.setText("Score : " + score);
prizeImage.setImageResource(cards[n]);
receiveButton.setVisibility(View.VISIBLE);
prizeImage.setVisibility(View.VISIBLE);
openButton.setVisibility(View.GONE);
battleLogo.setVisibility(View.GONE);
crateImage.setVisibility(View.GONE);
}
});
receiveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
crateImage.setImageDrawable(res.getDrawable(R.drawable.crate));
openButton.setVisibility(View.VISIBLE);
battleLogo.setVisibility(View.VISIBLE);
crateImage.setVisibility(View.VISIBLE);
prizeImage.setVisibility(View.GONE);
receiveButton.setVisibility(View.GONE);
}
});
}
@Override
protected void onStart() {
super.onStart();
//getting preferences
SharedPreferences prefs = this.getSharedPreferences("MyScore", Context.MODE_PRIVATE);
score = prefs.getInt("score", 0); //0 is the default value
}
}
答案 0 :(得分:1)
您始终将0
加入SharedPreferenes
,因此始终为0
(这恰好是您的默认值)。如果首选项已成功更新,您可以通过检查commit
- True
的返回值来确认这一点。更改score
中的onClick
变量不会更改SharedPreferences
中存储的值。
您要做的是每次{/ 1}} 更新SharedPreferences
score
值更改(或更实际地,Activity
暂停或销毁时)
答案 1 :(得分:1)
您的分数是通过onClick方法计算得出的。因此,将您的共享偏好设置保存在分数计算下方。
switch (n) {
case 0:
score += 10;
break;
case 1:
score += 20;
break;
case 3:
score += 30;
break;
}
SharedPreferences myScore = this.getSharedPreferences("MyScore", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myScore.edit();
editor.putInt("score", score);
editor.commit();
当您的分数为0时,从OnCreate中移除上述保存代码。