博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将ArrayList保存到SharedPreferences
阅读量:2290 次
发布时间:2019-05-09

本文共 11691 字,大约阅读时间需要 38 分钟。

本文翻译自:

I have an ArrayList with custom objects. 我有一个带有自定义对象的ArrayList Each custom object contains a variety of strings and numbers. 每个自定义对象均包含各种字符串和数字。 I need the array to stick around even if the user leaves the activity and then wants to come back at a later time, however I don't need the array available after the application has been closed completely. 即使用户离开活动然后想要稍后再回来,我也需要阵列保持住状态,但是在应用程序完全关闭后,我不需要阵列可用。 I save a lot of other objects this way by using the SharedPreferences but I can't figure out how to save my entire array this way. 我通过使用SharedPreferences以这种方式保存了许多其他对象,但是我不知道如何以这种方式保存我的整个数组。 Is this possible? 这可能吗? Maybe SharedPreferences isn't the way to go about this? 也许不是SharedPreferences可以解决这个问题? Is there a simpler method? 有没有更简单的方法?


#1楼

参考:


#2楼

Saving Array in SharedPreferences : Array保存在SharedPreferences

public static boolean saveArray(){    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);    SharedPreferences.Editor mEdit1 = sp.edit();    /* sKey is an array */    mEdit1.putInt("Status_size", sKey.size());      for(int i=0;i

Loading Array Data from SharedPreferences SharedPreferences加载Array数据

public static void loadArray(Context mContext){      SharedPreferences mSharedPreference1 =   PreferenceManager.getDefaultSharedPreferences(mContext);    sKey.clear();    int size = mSharedPreference1.getInt("Status_size", 0);      for(int i=0;i

#3楼

You could refer the serializeKey() and deserializeKey() functions from FacebookSDK's SharedPreferencesTokenCache class. 您可以从FacebookSDK的SharedPreferencesTokenCache类引用serializeKey()和deserializeKey()函数。 It converts the supportedType into the JSON object and store the JSON string into SharedPreferences . 它将supportedType转换为JSON对象,并将JSON字符串存储到SharedPreferences中 You could download SDK from 您可以从下载SDK

private void serializeKey(String key, Bundle bundle, SharedPreferences.Editor editor)    throws JSONException {    Object value = bundle.get(key);    if (value == null) {        // Cannot serialize null values.        return;    }    String supportedType = null;    JSONArray jsonArray = null;    JSONObject json = new JSONObject();    if (value instanceof Byte) {        supportedType = TYPE_BYTE;        json.put(JSON_VALUE, ((Byte)value).intValue());    } else if (value instanceof Short) {        supportedType = TYPE_SHORT;        json.put(JSON_VALUE, ((Short)value).intValue());    } else if (value instanceof Integer) {        supportedType = TYPE_INTEGER;        json.put(JSON_VALUE, ((Integer)value).intValue());    } else if (value instanceof Long) {        supportedType = TYPE_LONG;        json.put(JSON_VALUE, ((Long)value).longValue());    } else if (value instanceof Float) {        supportedType = TYPE_FLOAT;        json.put(JSON_VALUE, ((Float)value).doubleValue());    } else if (value instanceof Double) {        supportedType = TYPE_DOUBLE;        json.put(JSON_VALUE, ((Double)value).doubleValue());    } else if (value instanceof Boolean) {        supportedType = TYPE_BOOLEAN;        json.put(JSON_VALUE, ((Boolean)value).booleanValue());    } else if (value instanceof Character) {        supportedType = TYPE_CHAR;        json.put(JSON_VALUE, value.toString());    } else if (value instanceof String) {        supportedType = TYPE_STRING;        json.put(JSON_VALUE, (String)value);    } else {        // Optimistically create a JSONArray. If not an array type, we can null        // it out later        jsonArray = new JSONArray();        if (value instanceof byte[]) {            supportedType = TYPE_BYTE_ARRAY;            for (byte v : (byte[])value) {                jsonArray.put((int)v);            }        } else if (value instanceof short[]) {            supportedType = TYPE_SHORT_ARRAY;            for (short v : (short[])value) {                jsonArray.put((int)v);            }        } else if (value instanceof int[]) {            supportedType = TYPE_INTEGER_ARRAY;            for (int v : (int[])value) {                jsonArray.put(v);            }        } else if (value instanceof long[]) {            supportedType = TYPE_LONG_ARRAY;            for (long v : (long[])value) {                jsonArray.put(v);            }        } else if (value instanceof float[]) {            supportedType = TYPE_FLOAT_ARRAY;            for (float v : (float[])value) {                jsonArray.put((double)v);            }        } else if (value instanceof double[]) {            supportedType = TYPE_DOUBLE_ARRAY;            for (double v : (double[])value) {                jsonArray.put(v);            }        } else if (value instanceof boolean[]) {            supportedType = TYPE_BOOLEAN_ARRAY;            for (boolean v : (boolean[])value) {                jsonArray.put(v);            }        } else if (value instanceof char[]) {            supportedType = TYPE_CHAR_ARRAY;            for (char v : (char[])value) {                jsonArray.put(String.valueOf(v));            }        } else if (value instanceof List
) { supportedType = TYPE_STRING_LIST; @SuppressWarnings("unchecked") List
stringList = (List
)value; for (String v : stringList) { jsonArray.put((v == null) ? JSONObject.NULL : v); } } else { // Unsupported type. Clear out the array as a precaution even though // it is redundant with the null supportedType. jsonArray = null; } } if (supportedType != null) { json.put(JSON_VALUE_TYPE, supportedType); if (jsonArray != null) { // If we have an array, it has already been converted to JSON. So use // that instead. json.putOpt(JSON_VALUE, jsonArray); } String jsonString = json.toString(); editor.putString(key, jsonString); }}private void deserializeKey(String key, Bundle bundle) throws JSONException { String jsonString = cache.getString(key, "{}"); JSONObject json = new JSONObject(jsonString); String valueType = json.getString(JSON_VALUE_TYPE); if (valueType.equals(TYPE_BOOLEAN)) { bundle.putBoolean(key, json.getBoolean(JSON_VALUE)); } else if (valueType.equals(TYPE_BOOLEAN_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); boolean[] array = new boolean[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = jsonArray.getBoolean(i); } bundle.putBooleanArray(key, array); } else if (valueType.equals(TYPE_BYTE)) { bundle.putByte(key, (byte)json.getInt(JSON_VALUE)); } else if (valueType.equals(TYPE_BYTE_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); byte[] array = new byte[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = (byte)jsonArray.getInt(i); } bundle.putByteArray(key, array); } else if (valueType.equals(TYPE_SHORT)) { bundle.putShort(key, (short)json.getInt(JSON_VALUE)); } else if (valueType.equals(TYPE_SHORT_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); short[] array = new short[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = (short)jsonArray.getInt(i); } bundle.putShortArray(key, array); } else if (valueType.equals(TYPE_INTEGER)) { bundle.putInt(key, json.getInt(JSON_VALUE)); } else if (valueType.equals(TYPE_INTEGER_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); int[] array = new int[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = jsonArray.getInt(i); } bundle.putIntArray(key, array); } else if (valueType.equals(TYPE_LONG)) { bundle.putLong(key, json.getLong(JSON_VALUE)); } else if (valueType.equals(TYPE_LONG_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); long[] array = new long[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = jsonArray.getLong(i); } bundle.putLongArray(key, array); } else if (valueType.equals(TYPE_FLOAT)) { bundle.putFloat(key, (float)json.getDouble(JSON_VALUE)); } else if (valueType.equals(TYPE_FLOAT_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); float[] array = new float[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = (float)jsonArray.getDouble(i); } bundle.putFloatArray(key, array); } else if (valueType.equals(TYPE_DOUBLE)) { bundle.putDouble(key, json.getDouble(JSON_VALUE)); } else if (valueType.equals(TYPE_DOUBLE_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); double[] array = new double[jsonArray.length()]; for (int i = 0; i < array.length; i++) { array[i] = jsonArray.getDouble(i); } bundle.putDoubleArray(key, array); } else if (valueType.equals(TYPE_CHAR)) { String charString = json.getString(JSON_VALUE); if (charString != null && charString.length() == 1) { bundle.putChar(key, charString.charAt(0)); } } else if (valueType.equals(TYPE_CHAR_ARRAY)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); char[] array = new char[jsonArray.length()]; for (int i = 0; i < array.length; i++) { String charString = jsonArray.getString(i); if (charString != null && charString.length() == 1) { array[i] = charString.charAt(0); } } bundle.putCharArray(key, array); } else if (valueType.equals(TYPE_STRING)) { bundle.putString(key, json.getString(JSON_VALUE)); } else if (valueType.equals(TYPE_STRING_LIST)) { JSONArray jsonArray = json.getJSONArray(JSON_VALUE); int numStrings = jsonArray.length(); ArrayList
stringList = new ArrayList
(numStrings); for (int i = 0; i < numStrings; i++) { Object jsonStringValue = jsonArray.get(i); stringList.add(i, jsonStringValue == JSONObject.NULL ? null : (String)jsonStringValue); } bundle.putStringArrayList(key, stringList); }}

#4楼

best way is that convert to JSOn string using GSON and save this string to SharedPreference. 最好的方法是使用GSON转换为JSOn字符串,然后将此字符串保存到SharedPreference。 I also use this way to cache responses. 我也使用这种方式来缓存响应。


#5楼

The best way i have been able to find is a make a 2D Array of keys and put the custom items of the array in the 2-D array of keys and then retrieve it through the 2D arra on startup. 我能够找到的最好方法是制作一个二维键数组,并将该数组的自定义项放入二维键数组中,然后在启动时通过二维arra检索它。 I did not like the idea of using string set because most of the android users are still on Gingerbread and using string set requires honeycomb. 我不喜欢使用字符串集的想法,因为大多数android用户仍在使用Gingerbread,并且使用字符串集需要蜂窝。

Sample Code: here ditor is the shared pref editor and rowitem is my custom object. 示例代码:此处ditor是共享的pref编辑器,rowitem是我的自定义对象。

editor.putString(genrealfeedkey[j][1], Rowitemslist.get(j).getname());        editor.putString(genrealfeedkey[j][2], Rowitemslist.get(j).getdescription());        editor.putString(genrealfeedkey[j][3], Rowitemslist.get(j).getlink());        editor.putString(genrealfeedkey[j][4], Rowitemslist.get(j).getid());        editor.putString(genrealfeedkey[j][5], Rowitemslist.get(j).getmessage());

#6楼

Using this object --> its very simple. 使用此对象-> 非常简单。

TinyDB tinydb = new TinyDB(context);

to put 放在

tinydb.putList("MyUsers", mUsersArray);

to get 要得到

tinydb.getList("MyUsers");

UPDATE 更新

Some useful examples and troubleshooting might be found here: 可能会在此处找到一些有用的示例和故障排除:

转载地址:http://sgcnb.baihongyu.com/

你可能感兴趣的文章