我有一个应用程序,它将MainActivity中的星星总收入显示为textview。我想要做的是输入0,如果该应用程序是第一次运行。然后,当我完成一个关卡并获得一些星星(如currentScore + 50 = newScore)后,它将通过newScore textView重定向到MainActivity。如何将分数保存到SharedPreferences然后更新它?
这是我的MainActivity在TextView的显示得分
public class MainActivity extends Activity {
private static TextView txt_stars;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateStars();
}
public void updateStars() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("Stars", 0);
editor.commit();
txt_stars = (TextView) findViewById(R.id.txtStars);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
//the key is "Stars" don't forget to type it as you created the Sp
String stars = String.valueOf(sharedPreferences.getInt("Stars", 0));
txt_stars.setText(stars);
}
}
而对于在那里我阅读了当前得分活动,然后加50到它,然后更新
public void onClick(DialogInterface dialog, int whichButton) {
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Integer newstars = sharedPreferences.getInt("Stars", 0);
Integer totalStars = newstars + 50;
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("Stars", totalStars);
editor.commit();
//please help me improve my code here
Intent nextForm = new Intent(.MainActivity");
startActivity(nextForm);
}
,也可以一SharedPreferences用于不同的活动?就像我只是从ActivityOne保存一个分数,并可以在ActivityTwo中读取?
非常感谢!
我认为一个改进就是让'sharedStars'和'editor'成为类的成员,所以每次用户单击按钮时都不会实例化它们。你也可以保留星星的数量,这样你就不会一遍又一遍地读它们了。 –
是的,SharedPreferences可以在不同的活动之间使用。如果您使用“MODE_WORLD_READABLE”或“MODE_WORLD_WRITEABLE”*创建共享首选项文件,它们甚至可以在不同的应用程序*之间使用。 – Voicu