我正在尝试使用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
。所以我的问题是,我该如何检索它?
答案 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”开发的