SharedPreferences代码无法按预期工作

时间:2016-08-02 22:28:23

标签: java android sharedpreferences android-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();

在第一次启动消息时#34;第一次启动"出现,但不应出现在下一次,而是应该出现保存在sharedPreferences中的迭代器i。

    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文件中,而只是说#34;第一次启动&#34 ;每次..我对编程非常陌生,并试图以多种方式克服这个问题,只是为了达到同样的问题。救命啊!

1 个答案:

答案 0 :(得分:0)

据我所知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(“Iterator”,0)调用传递一个int而不是一个字符串后,你的Toast中出现了问题。

此外,我不会在整个应用程序中打开编辑器。我通常会写一个像

这样的函数
void savePreference(String key, String value) {
    SharedPreferences prefs = context.getSharedPreferences(PREFERENCES_NAME, 0);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}