如何获得SharedPreferences android的价值

时间:2017-12-28 02:44:14

标签: android android-sharedpreferences

我正在尝试使用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"}}

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

 @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。所以我的问题是,我该如何检索它?

5 个答案:

答案 0 :(得分: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 :(得分: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());

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

答案 2 :(得分:0)

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

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

我想应该解决它。

答案 3 :(得分: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();

}

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

}

希望得到这个帮助。

答案 4 :(得分:0)

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

Source