存储在共享首选项中的数据在退出应用程序时丢失



我正在开发一个计步器应用程序。步数逐渐增加,我想将步数数据保存在共享首选项中,但是当我返回主页并重新启动应用程序时,我认为应该保存在共享首选项中的步骤数据消失并重置为0。 以下是我代码的一部分。如何解决这个问题?谢谢。

public class MainActivity extends AppCompatActivity {
String finalstep="";
String valuestring1= null;
private static final String step = "STEP";
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf =new SimpleDateFormat("dd");
String strDate = sdf.format(c.getTime());
int date = Integer.parseInt(strDate);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void readData(){
settings = getSharedPreferences(step,MODE_WORLD_READABLE);
textSteps.setText(settings.getString(valuestring1, ""));
}
public void resetSteps(View v) {
String strDate1 = sdf.format(c.getTime());
int date1 = Integer.parseInt(strDate1);
if(date1==date) {
readData();
textSteps.setText(valuestring1);
}
else{
date=date1;
numSteps = 0;
textSteps.setText(String.valueOf(numSteps));
}
}
public void saveData(){
String s = String.valueOf(finalstep);
settings = getSharedPreferences(step,0);
settings.edit()
.putString(s, valuestring1).commit();
}
public void pressed (View v) {
if(v.getId()==R.id.exit) {
saveData();
}
}
}

在 saveData 中,在向共享首选项添加值的同时,您必须将键作为

settings.edit().putString("KEY_STEP", s).commit();

在获取共享首选项值时,您必须获取为

settings.getString("KEY_STEP", "")

你犯了一些错误。您放置钥匙的位置是错误的。还使共享首选项成为成员类

public class Main3Activity extends AppCompatActivity {
String finalstep="";
String valuestring1= "STEP_VALUE";
private static final String step = "STEP";
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd");
String strDate = sdf.format(c.getTime());
int date = Integer.parseInt(strDate);
private SharedPreferences settings;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
settings = getSharedPreferences(step, Context.MODE_PRIVATE);
}
public void readData(){
textSteps.setText(settings.getString(valuestring1, ""));
}
public void resetSteps(View v) {
String strDate1 = sdf.format(c.getTime());
int date1 = Integer.parseInt(strDate1);
if(date1==date) {
readData();
textSteps.setText(valuestring1);
}
else{
date=date1;
numSteps = 0;
textSteps.setText(String.valueOf(numSteps));
}
}
public void saveData(){
String s = String.valueOf(finalstep);
settings.edit().putString(valuestring1, s).apply();
}
public void pressed (View v) {
if(v.getId() == R.id.exit) {
saveData();
}
}
}

请找到带有突出显示的更新代码:-

public class MainActivity extends AppCompatActivity {
String finalstep = "abc";/* assign some value*/
String valuestring1 = null;
private static final String step = "STEP";
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("dd");
String strDate = sdf.format(c.getTime());
int date = Integer.parseInt(strDate);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void readData() {
settings = getSharedPreferences(step, Context.MODE_PRIVATE);
/*
accessing with same value which was used at time of saving i.e. s
*/
textSteps.setText(settings.getString(finalstep, ""));//
}
public void resetSteps(View v) {
String strDate1 = sdf.format(c.getTime());
int date1 = Integer.parseInt(strDate1);
if (date1 == date) {
readData();
textSteps.setText(valuestring1);
} else {
date = date1;
numSteps = 0;
textSteps.setText(String.valueOf(numSteps));
}
}
public void saveData() {
String s = String.valueOf(finalstep);/* you can directly use finalstep no need of conversion and also no need to declare locally directly use finalstep*/
settings = getSharedPreferences(step, 0);
settings.edit()
.putString(s, valuestring1).commit();
}
public void pressed(View v) {
if (v.getId() == R.id.exit) {
saveData();
}
}

}

当您将值存储在其他键中并尝试使用其他键查找时。

其次,我没有得到您想要存储的内容,您想要存储的内容只是将该值分配给 valueString1,因为null存储在 ValueString1 中,您正在尝试存储它并将其取回。

最新更新