SharedPreferences代码无法按预期工作
问题描述:
所有必需的导入都已添加。SharedPreferences代码无法按预期工作
public class MainActivity extends AppCompatActivity {
SharedPreferences preferences;
SharedPreferences.Editor editor;
public int i;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
editor = preferences.edit();
在第一次启动“首次启动”出现的消息,但在接下来的时间应该不会出现,而不是我,这是保存在sharedPreferences,应该出现在迭代器。
try{
i = preferences.getInt("iterator", 0);
Toast.makeText(getApplicationContext(), i, Toast.LENGTH_SHORT).show();
}catch(Exception e){
Toast.makeText(MainActivity.this, "First time boot", Toast.LENGTH_SHORT).show();
}
final TextView date = (TextView) (findViewById(R.id.textView));
final Calendar c = Calendar.getInstance();
date.setText(DateFormat.getDateFormat(this).format(c.getTime()));
final Button mainBtn = (Button) findViewById(R.id.mainBtn);
final Button exit = (Button) findViewById(R.id.exit);
mainBtn.setText("Clock In");
mainBtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
if(mainBtn.getText() == "Clock In"){
mainBtn.setText("Clock Out");
}else{mainBtn.setText("Clock In");}
String s = new SimpleDateFormat("yyyy: MM: dd HH: mm: ss").format(Calendar.getInstance().getTime());
我的想法是,单击按钮时,时间戳将被保存到sharedPreferences文件中,该文件稍后可以被访问。
editor.putString("Time "+ i, s);
i++;
editor.putInt("iterator", i);
}
});
我最近刚添加这一点,所以,当你点击退出按钮,这是摆在sharedPreferences文件将被保存一切。 (之前的editor.commit()行在mainBtn onClickListener中)。
exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editor.commit();
finish();
}
});
}
的问题是,在退出应用程序,并重新启动它,应用程序不会检索存储的数据,这是应该被保存在sharedPreferences文件,相反,它只是说:“第一次启动”每一次..我对编程都非常陌生,并试图用多种方式来克服这个问题,只是为了解决同样的问题。帮帮我!
答
据我所知preferences.getInt(“iterator”,0);如果“迭代器”不存在,则不会抛出异常。它将返回一个0.默认值为0。我会改变你的代码更多的东西一样:
int iterator = preferences.getInt("iterator", -1);
if (iterator == -1)
Toast.makeText(this, "First time boot", Toast.LENGTH_SHORT).show();
如果你看看你的例外,我猜想,这个问题你getInt后是你的面包实际(“迭代”,0)调用是传递一个int而不是一个字符串。
另外,我不会让编辑器在整个应用程序中保持打开状态。我通常会写一个功能,如
void savePreference(String key, String value) {
SharedPreferences prefs = context.getSharedPreferences(PREFERENCES_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(key, value);
editor.commit();
}