Сохранить массив строк в SharedPreferences [дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

50
задан Gabrielle 1 November 2011 в 12:43
поделиться

4 ответа

Вы можете создать собственное строковое представление массива следующим образом:

StringBuilder sb = new StringBuilder();
for (int i = 0; i < playlists.length; i++) {
    sb.append(playlists[i]).append(",");
}
prefsEditor.putString(PLAYLISTS, sb.toString());

Затем, когда вы получаете String из SharedPreferences, просто проанализируйте его следующим образом:

String[] playlists = playlist.split(",");

Это должно выполнить эту работу.

80
ответ дан Egor 28 August 2018 в 06:11
поделиться

Вы можете использовать JSON для сериализации массива в виде строки и сохранения его в настройках. См. Мой ответ и пример кода для аналогичного вопроса здесь:

Как написать код для создания sharedpreferences для массива в android?

8
ответ дан Community 28 August 2018 в 06:11
поделиться
HashSet<String> mSet = new HashSet<>();
                mSet.add("data1");
                mSet.add("data2");
saveStringSet(context, mSet);

где

public static void saveStringSet(Context context, HashSet<String> mSet) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = sp.edit();
    editor.putStringSet(PREF_STRING_SET_KEY, mSet);
    editor.apply();
}

и

public static Set<String> getSavedStringSets(Context context) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
    return sp.getStringSet(PREF_STRING_SET_KEY, null);
}

private static final String PREF_STRING_SET_KEY = "string_set_key";
0
ответ дан Dan Alboteanu 28 August 2018 в 06:11
поделиться

С уровня API 11 вы можете использовать putStringSet и getStringSet для хранения / извлечения наборов строк:

SharedPreferences pref = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putStringSet(SOME_KEY, someStringSet);
editor.commit();

SharedPreferences pref = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
Set<String> someStringSet = pref.getStringSet(SOME_KEY);
24
ответ дан MikeL 28 August 2018 в 06:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: