如何获取 SharedPreferences android 的值

How to get value of SharedPreferences android

我正在尝试使用 SharedPreferences 我就是这样做的

public void StoreToshared(Object userData){
    SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = mPrefs.edit();

    Gson gson = new Gson();
    String json = gson.toJson(userData);
    Log.d("data", " Setup --> "+json);
    prefsEditor.putString("userinfo", json);
    prefsEditor.commit();

}

Log.d结果是这样

 Setup --> {"nameValuePairs":{"userData":{"nameValuePairs":{"phone":"089688xxxxxxx",
  "username":"username of User","flag":1,"Email":"mymail@mail.com",
  "tipe":"TP001","Deskripsi":"Ini tentang gua","user_id":"USER001",
 "password":"c83e4046a7c5d3c4bf4c292e1e6ec681","fullname":My fullname"}},"status":"true"}}

然后我尝试检索它,在其他 activity 这就是我所做的

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SharedPreferences mPrefs = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor prefsEditor = mPrefs.edit();

        String data = mPrefs.getString("userinfo", null);
        Log.i("Text", "Here is the retrieve");
        Log.i("data", " retrieve --> "+data);

    }

这是我如何打开我的另一个 activity

Intent intent = new Intent(Login.this, MainActivity.class);
startActivity(intent);

使用上面的脚本,logcat 的结果,我只看到上面的 Log.d。所以我的问题是,我怎样才能找回它?

您需要使用 Gson 将字符串数据从 SharedPreferences 转换回 PoJo。只需这样做:

Object userData = new Gson().fromJson(data, Object.class);

我想应该可以解决问题。

尝试在您的 SharedPreferences 上添加一个密钥:

public void StoreToshared(Object userData){
    SharedPreferences mPrefs = getSharedPreferences("your_sp_key", MODE_PRIVATE); //add key
    SharedPreferences.Editor prefsEditor = mPrefs.edit();

    Gson gson = new Gson();
    String json = gson.toJson(userData);
    Log.d("data", " Setup --> "+json);
    prefsEditor.putString("userinfo", json);
    prefsEditor.commit();

}

检索:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences mPrefs = getSharedPreferences("your_sp_key", MODE_PRIVATE); //add key
    SharedPreferences.Editor prefsEditor = mPrefs.edit();

    String data = mPrefs.getString("userinfo", null);
    Log.i("Text", "Here is the retrieve");
    Log.i("data", " retrieve --> "+data);

}

您可以创建 2 种方法:

// put value
public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

// get value
public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

然后你可以输入值

putPref("userinfo", "/** user data json */", getApplicationContext());

并获取价值

String data = getPref("userinfo", getApplicationContext());

希望对您的问题有所帮助!

api:getPreferences 将使用 activity 名称创建 xml 文件(如果不存在)。例如,假设 StoreToshared 方法放在 activity: LoginActivity.java 中,它会创建一个文件:LoginActivity.xml 来存储你的 pref 数据。因此,当您进入其他 activity,假设其名称为:MainActivity.java,getPreferences 将查看文件 "MainActivity.xml" 而不是 "LoginActivity.xml",这就是您无法检索您的文件的原因数据.

解决方法是使用:getSharedPreferences。 因此,您的代码可以修改如下:

public void StoreToshared(Object userData) {

SharedPreferences mPrefs = getSharedPreferences("FILE_NAME",MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();

Gson gson = new Gson();
String json = gson.toJson(userData);
Log.d("data", " Setup --> "+json);
prefsEditor.putString("userinfo", json);
prefsEditor.commit();

}

@Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences mPrefs = getSharedPreferences("FILE_NAME",MODE_PRIVATE);
    SharedPreferences.Editor prefsEditor = mPrefs.edit();

    String data = mPrefs.getString("userinfo", null);
    Log.i("Text", "Here is the retrieve");
    Log.i("data", " retrieve --> "+data);

}

希望对您有所帮助。

2020年, Google 已发布新的数据存储,取代了共享首选项... 它是用“Kotlin”开发的

Source