Android SharedReferences不使用int值
我正在为android编写一个应用程序,我很难用SharedReferences保存int变量。我已经检查了我的代码一千次了,我还没有找到有问题的部分。我有两项活动。在Activity1中,我有一个按钮指向第二个按钮。在Activity2中,我有一个按钮,可以向我的变量添加50个“点”。我将此变量保存在onPause和onStop方法中。之后,我回到活动1,我又得了0分 活动1:Android SharedReferences不使用int值,android,sharedpreferences,Android,Sharedpreferences,我正在为android编写一个应用程序,我很难用SharedReferences保存int变量。我已经检查了我的代码一千次了,我还没有找到有问题的部分。我有两项活动。在Activity1中,我有一个按钮指向第二个按钮。在Activity2中,我有一个按钮,可以向我的变量添加50个“点”。我将此变量保存在onPause和onStop方法中。之后,我回到活动1,我又得了0分 活动1: private static final String HINT = "Hint"; private static
private static final String HINT = "Hint";
private static final String VALUE = "VALUE";
int hints;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainketto); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.setContentView(R.layout.activity_mainketto);
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
hints = sphint.getInt(VALUE, 0);
android.support.v7.app.ActionBar actionbar = getSupportActionBar();
actionbar.hide();
Toast.makeText(MainActivity.this, "" + hints,
Toast.LENGTH_LONG).show();
Button points = (Button)findViewById(R.id.button3);
points.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,PointsActivity.class);
startActivity(i);
}
});
}
@Override
protected void onPause() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
SharedPreferences.Editor et2 = sphint.edit();
et2.putInt(VALUE, hints);
et2.commit();
super.onPause();
}
@Override
protected void onStop() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
SharedPreferences.Editor et2 = sphint.edit();
et2.putInt(VALUE, hints);
et2.commit();
super.onStop();
}
活动2:
private static final String HINT = "Hint";
private static final String VALUE = "VALUE";
int hints;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pontpiac);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.setContentView(R.layout.activity_pontpiac);
android.support.v7.app.ActionBar actionbar = getSupportActionBar();
actionbar.hide();
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
hints = sphint.getInt(VALUE, 0);
Toast.makeText(Pontpiac.this, ""+hints,
Toast.LENGTH_LONG).show();
Button btn = (Button)findViewById(R.id.tesztfos);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hints = hints + 50;
Toast.makeText(Pontpiac.this, ""+hints,
Toast.LENGTH_LONG).show();
}
});
@Override
protected void onPause() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
SharedPreferences.Editor et2 = sphint.edit();
et2.putInt(VALUE, hints);
et2.commit();
super.onPause();
}
@Override
protected void onStop() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
SharedPreferences.Editor et2 = sphint.edit();
et2.putInt(VALUE, hints);
et2.commit();
super.onStop();
}
如果有人有一个如何使其工作的想法,请回应 您需要在第一个活动的
onResume
中再次获取首选项您需要在第一个活动的onResume
中再次获取首选项您需要在第一个活动的onResume
中再次获取首选项activityactivity.onCreate()
通常仅在首次创建活动时调用一次。它就像一个虚拟构造器。从Activity2导航回Activity1时,不会再次调用Activity1的onCreate()
。正如@tyczj在回答中所说的,您需要重写onResume()
,然后再次获取该值。例如:
@Override
protected void onResume() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
hints = sphint.getInt(VALUE, 0);
}
顺便说一句,我不知道为什么要使用getApplicationContext().getSharedReferences(…)
。您的活动
是一个上下文
。您只需调用getSharedReferences(…)
,它就会工作。Activity.onCreate()
通常仅在首次创建活动时调用一次。它就像一个虚拟构造器。从Activity2导航回Activity1时,不会再次调用Activity1的onCreate()
。正如@tyczj在回答中所说的,您需要重写onResume()
,然后再次获取该值。例如:
@Override
protected void onResume() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
hints = sphint.getInt(VALUE, 0);
}
顺便说一句,我不知道为什么要使用getApplicationContext().getSharedReferences(…)
。您的活动
是一个上下文
。您只需调用getSharedReferences(…)
,它就会工作。Activity.onCreate()
通常仅在首次创建活动时调用一次。它就像一个虚拟构造器。从Activity2导航回Activity1时,不会再次调用Activity1的onCreate()
。正如@tyczj在回答中所说的,您需要重写onResume()
,然后再次获取该值。例如:
@Override
protected void onResume() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
hints = sphint.getInt(VALUE, 0);
}
顺便说一句,我不知道为什么要使用getApplicationContext().getSharedReferences(…)
。您的活动
是一个上下文
。您只需调用getSharedReferences(…)
,它就会工作。Activity.onCreate()
通常仅在首次创建活动时调用一次。它就像一个虚拟构造器。从Activity2导航回Activity1时,不会再次调用Activity1的onCreate()
。正如@tyczj在回答中所说的,您需要重写onResume()
,然后再次获取该值。例如:
@Override
protected void onResume() {
SharedPreferences sphint = getApplicationContext().getSharedPreferences(HINT, MODE_PRIVATE);
hints = sphint.getInt(VALUE, 0);
}
顺便说一句,我不知道为什么要使用getApplicationContext().getSharedReferences(…)
。您的活动
是一个上下文
。您只需调用getSharedReferences(…)
即可使用。您可以使用my library:是一个“超级”SharedReference,允许您保存int、String和boolean,如下所示:
KeySaver.saveShare(this, "your-key", 1); //or any int
要获取值,请执行以下操作:
KeySaver.getIntSavedShare(this, "your-key");
您可以使用my library:是一个“超级”SharedReference,允许您保存int、String和boolean,如下所示:
KeySaver.saveShare(this, "your-key", 1); //or any int
要获取值,请执行以下操作:
KeySaver.getIntSavedShare(this, "your-key");
您可以使用my library:是一个“超级”SharedReference,允许您保存int、String和boolean,如下所示:
KeySaver.saveShare(this, "your-key", 1); //or any int
要获取值,请执行以下操作:
KeySaver.getIntSavedShare(this, "your-key");
您可以使用my library:是一个“超级”SharedReference,允许您保存int、String和boolean,如下所示:
KeySaver.saveShare(this, "your-key", 1); //or any int
要获取值,请执行以下操作:
KeySaver.getIntSavedShare(this, "your-key");