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(); 
}