[英]How to save Arraylist of Objects from Fragment class into SharedPreferencess
我在stackoverflow( LINK , LINK )和其他网站中看到了类似的问题。 他们正在执行“活动”中的所有内容,因此没有遇到任何问题。
我有一个Activity和Fragment类。 我正在尝试从Fragment 将Object的ArrayList保存到共享的首选项中 。 以下是我尝试过的
SharedPreferences prefs = getActivity().getSharedPreferences("SHARED_PREFS_FILE", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
try {
editor.putString("taggedFriends",ObjectSerializer.serialize(taggableFriends));
} catch (IOException e) {
e.printStackTrace();
它在ObjectSerializer中显示错误
**Cannot resolve symbom 'ObjectSerializer'**
我试过了
getActivity.ObjectSerializer.serialize(..);
但是错误没有消失。 帮帮我,我现在该怎么办。
谢谢您为我花费时间。
尝试这个:
最后编辑:
在这种情况下:
static class YourObject
{
private String _name;
public YourObject(String name)
{
this._name = name;
}
}
YourObject yourObject = new YourObject(myName);
ArrayList<YourObject> foo = new ArrayList<YourObject>();
foo.add(yourObject);
将ArrayList转换为JSONArray:
JSONArray mJSONArray = new JSONArray(foo);
然后保存JSONArray:
SharedPreferences.Editor editor = prefs.edit();
editor.putString("yourStringName", mJSONArray.toString());
字符串到JSONArray:
SharedPreferences prefs = getSharedPreferences("SHARED_PREFS_FILE", Context.MODE_PRIVATE);
String myJSONArrayString = prefs.getString("yourStringName", "");
JSONArray jsonArray = new JSONArray(myJSONArrayString);
JSONArray到ArrayList:
ArrayList<String> list = new ArrayList<String>();
for (int i=0;i<jsonArray.length();i++){
list.add(jsonArray.get(i).toString());
}
我希望这能解决您的问题。
首先将Gson添加到您的gradle中:
compile 'com.google.code.gson:gson:2.2.4'
将您的列表转换为Json String,如下所示:
List<String> foo = new ArrayList<String>();
foo.add("Item1");
foo.add("Item2");
foo.add("Item3");
String json = new Gson().toJson(foo );
并将其保存到共享首选项,如下所示:
SharedPreferences.Editor mEditor = mPrefs.edit();
mEditor.putString("yourKey", json);
当您要使用时,请从pref读取已保存的json字符串:
String json = mPrefs.getString("yourKey", "");
将您的Json字符串转换为如下所示的对象列表。 在示例中,我使用了String。
ArrayList<String> foo = (ArrayList<String>) new Gson().fromJson(json,
new TypeToken<ArrayList<String>>() {
}.getType());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.