来自不同活动的SharedPreferences

use*_*816 23 android

我以下列方式从活动A加载SharedPreferences:

private void SavePreferences(String key, String value){
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString(key, value);
    editor.commit();
}
Run Code Online (Sandbox Code Playgroud)

在活动BI处想要加载SharedPreferences.以下是NullPointerException:

private void LoadPreferences(){   
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    data = sharedPreferences.getString("name", "08:00") ;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试跟随,我得到此编译错误:"在范围中无法访问类型A的封闭实例"

private void LoadPreferences(){   
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(A.this);
    data = sharedPreferences.getString("name", "08:00") ;
}
Run Code Online (Sandbox Code Playgroud)

我如何访问数据?

ρяσ*_*я K 44

使用getApplicationContext()而不是this在两个活动中:

在活动A中,SharedPreferences以下列方式:

 private void SavePreferences(String key, String value){
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(key, value);
        editor.commit();
        Intent sd=new Intent(this,Secongtess.class);
        startActivity(sd);
       }
Run Code Online (Sandbox Code Playgroud)

在活动B中获取值为:

 private void LoadPreferences(){   
       SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
     String  data = sharedPreferences.getString("name", "08:00") ;
     Toast.makeText(this,data, Toast.LENGTH_LONG).show();
   }
Run Code Online (Sandbox Code Playgroud)

因为正如医生所说:

getDefaultSharedPreferences(Context context):

获取SharedPreferences实例,该实例指向给定上下文中首选项框架使用的默认文件.