首先:我在StackOverflow中搜索了我的问题。
Android - Using Shared Preferences in separate class?
我得到的期望值是零。
我正在为Android平台制作一个简单的2D游戏。我只需要设置一个关卡值就可以制作这款游戏。为了制作我的游戏;我创建了3个活动。第一次活动;取得级别编号,然后传递到第二个级别(操场)。之后;游戏已通过,第二项活动已传递到第三项。并且当用户单击到按钮时,级别将上升(+1)。级别数字始终大于1或1。我曾经使用“共享首选项”来保存我的值,但我无法正常工作。我该怎么办?
这是我的代码:
public class shared_level {
int level = 1;
private static Context context;
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public final static String PREFS_NAME = "Level_preference_name";
public static void setInt( String key, int level) {
SharedPreferences sharedPref = context.getSharedPreferences(PREFS_NAME,0);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(key, level);
editor.apply();
}
public static int getInt(String key) {
SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME, 0);
return prefs.getInt(key, 0 );
}
}
第一次活动:
final shared_level shared_level =new shared_level();
Toast.makeText(this, "" + shared_level.getLevel(), Toast.LENGTH_SHORT).show();
pass_to_second.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent git = new Intent(getApplicationContext(), second.class);
git.putExtra("level" ,String.valueOf(shared_level.getLevel()) );
startActivity(git);
MainActivity.this.finish();
}
});
}
第二活动:
Bundle extras = getIntent().getExtras();
final String value = extras.getString("level");
Toast.makeText(this, "Level is : " + " " + value, Toast.LENGTH_SHORT).show();
sayı.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent git = new Intent(getApplicationContext(), third.class);
git.putExtra("level", String.valueOf(value));
startActivity(git);
second.this.finish();
}
});
第三个按钮活动进入第一个:
Bundle extras = getIntent().getExtras();
final String value = extras.getString("level");
final shared_level shared_level =new shared_level();
int new_level =Integer.valueOf(value) + 1;
shared_level.setLevel(new_level);
Toast.makeText(this, "" + shared_level.getLevel(), Toast.LENGTH_SHORT).show();
sayım.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),MainActivity.class);
startActivity(i);
third.this.finish();
}
});
答案 0 :(得分:1)
您应该通过构造函数将context
传递给shared_level
类。
public class shared_level {
private Context context;
public shared_level(Context context) {
this.context = context;
}
...
}
并创建shared_level
类的实例,例如:
final shared_level shared_level = new shared_level(yourActivity.this);