Intereting Posts
Любое решение для Android Studio медленное наращивание града и использование большого диска? Задача и процесс Android, SingleTask и SingleInstance Возможность рисования вокруг своего центра Android Жизненный цикл класса приложений Android Просмотр сообщения в журналах: «приложение: тема устарела»? Android MediaPlayer бросает «Подготовить неудачу: статус = 0x1» на 2.1, работает на 2.2 Покрытие Android Увеличение размера кучи при создании исходного кода Android на Ubuntu 15.10 Реагировать на собственный андроид не удалось загрузить пакет JS Фрагмент addToBackStack () и popBackStackImmediate () не работают Невозможно выполнить это действие после onSaveInstanceState (предпочтение onClick) Метод воспроизведения YouTube IFrame API не работает до касания некоторых планшетов Android Как eclipse знает название вашего проекта? Архив для требуемой библиотеки не может быть прочитан или не является допустимым ZIP-файлом Как реализовать мою собственную схему URI на Android

Сохранить арриалист строк для общих настроек

Каков наилучший способ сохранить ArrayList строк в SharedPreferences в API 8? Единственный способ, о котором я могу думать сейчас, – сохранить все строки в одну строку, разделенные запятыми, и сохранить ее таким образом. Но я не знаю, есть ли максимальный размер для строк.

Есть лучший способ сделать это?

Solutions Collecting From Web of "Сохранить арриалист строк для общих настроек"

Я предлагаю вам сохранить arraylist как внутренний файл хранилища в Android. Например, для arraylist с именем text_lines :

Внутреннее хранилище Файл IO (запись):

 try { //Modes: MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE FileOutputStream output = openFileOutput("lines.txt",MODE_WORLD_READABLE); DataOutputStream dout = new DataOutputStream(output); dout.writeInt(text_lines.size()); // Save line count for(String line : text_lines) // Save lines dout.writeUTF(line); dout.flush(); // Flush stream ... dout.close(); // ... and close. } catch (IOException exc) { exc.printStackTrace(); } 

Интерактивное хранилище Файл IO (чтение):

 FileInputStream input = openFileInput("lines.txt"); // Open input stream DataInputStream din = new DataInputStream(input); int sz = din.readInt(); // Read line count for (int i=0;i<sz;i++) { // Read lines String line = din.readUTF(); text_lines.add(line); } din.close(); 

Если вы можете гарантировать, что String s в ArrayList не содержит запятую, вы можете просто использовать

 List<String> list = new ArrayList<String>(); ... editor.putString(PREF_KEY_STRINGS, TextUtils.join(",", list)); 

И прочитать список

 String serialized = prefs.getString(PREF_KEY_STRINGS, null); List<String> list = Arrays.asList(TextUtils.split(serialized, ",")); 

Вы ограничены памятью устройства. Рекомендуется использовать фоновый поток для чтения / записи общих настроек.

В putStringSet() есть метод putStringSet() , который вы можете использовать, если ваши строки являются Set . (То есть, нет дубликатов).

Если вы используете api (например, уровень 8), где вы не можете использовать put / getStringSet (), то это возможное решение, но это очень дорого и не является гибким, если вы хотите хранить более крупные списки. Я имею в виду создание такой карты, как datastructure для простой структуры, подобной массиву, которая создает огромные накладные расходы, если важна предварительная работа.

Чтобы сохранить его:

 public static void writeList(Context context, List<String> list, String prefix) { SharedPreferences prefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); int size = prefs.getInt(prefix+"_size", 0); // clear the previous data if exists for(int i=0; i<size; i++) editor.remove(prefix+"_"+i); // write the current list for(int i=0; i<list.size(); i++) editor.putString(prefix+"_"+i, list.get(i)); editor.putInt(prefix+"_size", list.size()); editor.commit(); } 

Чтобы получить его:

 public static List<String> readList (Context context, String prefix) { SharedPreferences prefs = context.getSharedPreferences("YourApp", Context.MODE_PRIVATE); int size = prefs.getInt(prefix+"_size", 0); List<String> data = new ArrayList<String>(size); for(int i=0; i<size; i++) data.add(prefs.getString(prefix+"_"+i, null)); return data; } 

И фактически использовать его:

 List<String> animals = new ArrayList<String>(); animals.add("cat"); animals.add("bear"); animals.add("dog"); writeList(someContext, animals, "animal"); 

И получить его:

 List<String> animals = readList (someContext, "animal"); 

Если вы не ограничены использованием SharedPreferences, рассмотрите возможность использования SQLiteDatabase !