Android:从非活动类访问SharedPrefernces

时间:2017-07-26 08:44:05

标签: android sharedpreferences

我试图从非活动类访问SharedPrefernces。

我试图用这种方式做到这一点:

Context applicationContext = MainActivity.getContextOfApplication();
SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(applicationContext);
private int age = prefs.getInt("Age", 0);
private String name = prefs.getString("Name", null);

但变量age为0,变量名为null。

我做错了什么?

我在活动类中保存SharedPreferences:

@Override
public void onClick(View v)
{
    switch (v.getId())
    {
        case R.id.saveButton:
            saveText();
            prefs = getPreferences(MODE_PRIVATE);
            int age = prefs.getInt("Age", 0);
            String name = prefs.getString("Name", null);
            if(name == null || age <= 0)
            {
                Toast.makeText(NameAge.this, "Put your name and your age", 
                       Toast.LENGTH_LONG).show();
            }
            else
            {
                Toast.makeText(NameAge.this, age+prefs.getString("Name", 
                           null), Toast.LENGTH_LONG).show();
                Intent i = new Intent(NameAge.this, MainActivity.class);
                startActivity(i);
                finish();
                break;
            }
    }
}

private void saveText()
{
    prefs = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor ed = prefs.edit();
    ed.putString(NAME, nameText.getText().toString());
    ed.putInt(AGE, Integer.parseInt(ageText.getText().toString()));
    ed.commit();

}

2 个答案:

答案 0 :(得分:1)

因为您尝试使用getPreferences(MODE_PRIVATE)在活动上下文级别存储偏好时尝试从默认共享首选项文件获取首选项。

如果您存储下面的偏好,则可以使用

SharedPreferences prefs = 
PreferenceManager.getDefaultSharedPreferences(applicationContext);
SharedPreferences.Editor ed = prefs.edit();
    ed.putString(NAME, nameText.getText().toString());
    ed.putInt(AGE, Integer.parseInt(ageText.getText().toString()));
    ed.commit();

答案 1 :(得分:0)

SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor ed = prefs.edit();
    ed.putString("name", "abc").commit();
    ed.putInt("age", 5).commit();
     int age = prefs.getInt("Age", 0);
     String name = prefs.getString("Name", null);

如果我使用上面的代码相同的问题发生0和null值与活动中的代码。尝试使用

prefs= getSharedPreferences("userPrefs", Context.MODE_PRIVATE);

而不是defaultSharedPreference。