Магазин ArrayList Общие Настройки Android

Это хорошая идея, чтобы сохранить список String слишком много предметов в Sharedpreferences? Влияет ли это на производительность приложения?

Я делаю это для хранения:

public boolean saveArray(List<String> contacts) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(_context);
    SharedPreferences.Editor editor = sp.edit();
    editor.putInt("Status_size", contacts.size());
    for (int i = 0; i < contacts.size(); i++) {
        editor.remove("Status_" + i);
        editor.putString("Status_" + i, contacts.get(i));
    }
    return editor.commit();
}

И читать:

public void loadArray(Context context) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    _validContactsPhones.clear();
    int size = sharedPreferences.getInt("Status_size", 0);
    for (int i = 0; i < size; i++) {
        _validContactsPhones.add(sharedPreferences.getString("Status_" + i, null));
    }
}

1 ответ

Решение

Нет, хранить огромный список String как контакты в SharedPreference,

Там нет конкретного ограничения размера для хранимых SharedPreference в вашем приложении, так как он хранится в /data/data/[package name]/shared_prefs/[app name].xml, Поскольку SharedPreferences хранятся в XML-файле, ему не хватает сильной поддержки транзакций SQLite. Следовательно, я бы порекомендовал хранить такие данные в базе данных SQLite.

Еще одна вещь, о которой нужно помнить: минимальный размер, который я знаю, будет вашим количеством свободного места в куче, так как SharedPreferences считывает содержимое всего XML-файла в память.

Ответ в основном скопирован отсюда.

Вы можете сохранить список пользовательских массивов, используя библиотеку Gson.

1) Сначала нужно создать функцию для сохранения списка массивов в SharedPreferences.

public void saveArray(ArrayList<String> contacts) {

        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(_context);
        SharedPreferences.Editor editor = sp.edit();
        Gson gson = new Gson();
        String json = gson.toJson(contacts);
        editor.putString("Status_List", json);
        editor.apply(); 

    }

2) Вам нужно создать функцию для получения списка массивов из SharedPreferences.

public void loadArray(Context context)
{
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    _validContactsPhones.clear();
    Gson gson = new Gson();
    String json = prefs.getString("Status_List", "");
    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    ArrayList<String> temp = gson.fromJson(json, type);
    _validContactsPhones.addAll(temp);
}
Другие вопросы по тегам