В общих настройках добавлены методы getStringSet
и putStringSet
в API Level 11, но они несовместимы со старыми версиями Android (которые все еще популярны), а также ограничены наборами строк.
Android не предоставляет более совершенных методов, и циклическое переключение между картами и массивами для их сохранения и загрузки не очень легко и просто, особенно для массивов. Но лучшая реализация не так уж сложна:
package com.example.utils;
import org.json.JSONObject;
import org.json.JSONArray;
import org.json.JSONException;
import android.content.Context;
import android.content.SharedPreferences;
public class JSONSharedPreferences {
private static final String PREFIX = "json";
public static void saveJSONObject(Context c, String prefName, String key, JSONObject object) {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(JSONSharedPreferences.PREFIX+key, object.toString());
editor.commit();
}
public static void saveJSONArray(Context c, String prefName, String key, JSONArray array) {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(JSONSharedPreferences.PREFIX+key, array.toString());
editor.commit();
}
public static JSONObject loadJSONObject(Context c, String prefName, String key) throws JSONException {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
return new JSONObject(settings.getString(JSONSharedPreferences.PREFIX+key, "{}"));
}
public static JSONArray loadJSONArray(Context c, String prefName, String key) throws JSONException {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
return new JSONArray(settings.getString(JSONSharedPreferences.PREFIX+key, "[]"));
}
public static void remove(Context c, String prefName, String key) {
SharedPreferences settings = c.getSharedPreferences(prefName, 0);
if (settings.contains(JSONSharedPreferences.PREFIX+key)) {
SharedPreferences.Editor editor = settings.edit();
editor.remove(JSONSharedPreferences.PREFIX+key);
editor.commit();
}
}
}
Теперь вы можете сохранить любую коллекцию в общих настройках с помощью этих пяти методов. Работать с JSONObject
и JSONArray
очень просто. Вы можете использовать JSONArray (Collection copyFrom)
открытый конструктор для создания JSONArray
из любой коллекции Java и использовать JSONArray
get
методы для доступа к элементам.
Нет ограничений по размеру для общих предпочтений (кроме ограничений памяти устройства), поэтому эти методы могут работать в большинстве обычных случаев, когда вы хотите быстрое и простое хранение некоторой коллекции в вашем приложении. Но здесь происходит синтаксический анализ JSON, и предпочтения в Android хранятся внутри в виде XML, поэтому я рекомендую использовать другие механизмы постоянного хранения данных, когда вы имеете дело с мегабайтами данных.