我从服务中获得JSON
,我将其优先保存,当用户需要检查会话或获取数据时,他使用此方法getProfileObject()
,并在其中返回ArrayList
返回。
这是我的方法,负责从Json
获取preference
并使用ArrayList
生成Gson
SharedPreferences sharedPreferences=ApplicationContext.getAppContext().getSharedPreferences(USER_DATA_PREFERENCE, ApplicationContext.MODE_PRIVATE);
profileObject= sharedPreferences.getString(PROFILE_OBJECT, "");
if(!profileObject.isEmpty()) {
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
this.dataList = Arrays.asList(gson.fromJson(profileObject, Profile.class));
return dataList;
}
现在,我希望每次都避免执行此Gson
步骤,我想存储arrayList
为shared preference
,是否可以以共享首选项存储java array list
。
答案 0 :(得分:0)
尝试使用View Model类,它将在整个活动生命周期中全局保存它。
希望这会有所帮助: https://developer.android.com/topic/libraries/architecture/viewmodel#implement
答案 1 :(得分:0)
尝试这种方式。 将数组列表存储为可序列化的对象,如下..
editor.putString("key", ObjectSerializer.serialize(currentTasks));// define arrayList
获取值。
currentTasks=(ArrayList<task>)ObjectSerializer.deserialize(prefs.getString(TASKS, ObjectSerializer.serialize(new ArrayList<task>())));
Gson dataJson = new Gson();
String userObject = dataJson.toJson(response.body());
之后,它将存储sharedpreference userObject并获取数据。
答案 2 :(得分:0)
public static void setArrayListPreference(Context context, ArrayList<String> list, String key){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
Gson gson = new Gson();
String json = gson.toJson(list);
editor.putString(key, json);
editor.apply();
}
public static ArrayList<String> getArrayListPreference(Context context, String key){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
Gson gson = new Gson();
String json = prefs.getString(key, null);
Type type = new TypeToken<ArrayList<String>>() {}.getType();
return gson.fromJson(json, type);
}