如何获得SharedPreferences android的价值

问题描述 投票:1回答:4

我正在尝试使用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":"[email protected]",
  "tipe":"TP001","Deskripsi":"Ini tentang gua","user_id":"USER001",
 "password":"c83e4046a7c5d3c4bf4c292e1e6ec681","fullname":My fullname"}},"status":"true"}}

然后我试图找回它,在其他活动这里是我做的

 @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);

    }

在这里我如何打开我的其他活动

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

上面的我的脚本,我的logcat的结果,我只看到像上面的Log.d。所以我的问题是,我该如何检索它?

android android-sharedpreferences
4个回答
1
投票

尝试在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);

}

1
投票

您可以创建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());

我希望它可以帮助你解决问题!


0
投票

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

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

我想这应该解决它。


0
投票

如果不存在,api:getPreferences将使用活动名称来创建xml文件。例如,假设StoreToshared方法放在活动中:LoginActivity.java,它将创建一个文件:LoginActivity.xml来存储你的pref数据。因此,当你进入其他活动时,让它的名字是: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);

}

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.