如何以共享首选项保存Java对象

时间:2018-07-03 10:29:21

标签: android android-layout

我从服务中获得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步骤,我想存储arrayListshared preference,是否可以以共享首选项存储java array list

3 个答案:

答案 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);
    }