将字符串的arraylist保存到共享首选项

Pet*_*ter 10 android arraylist sharedpreferences

在API级别8中保存ArrayList字符串的最佳方法是什么SharedPreferences?我现在能想到的唯一方法是将所有字符串保存到一个用逗号分隔的字符串中并以这种方式保存.但我不知道字符串是否有最大大小.

有一个更好的方法吗?

bie*_*eux 25

如果你可以保证你的Strings ArrayList不含逗号,你可以简单地使用

List<String> list = new ArrayList<String>();
...
editor.putString(PREF_KEY_STRINGS, TextUtils.join(",", list));
Run Code Online (Sandbox Code Playgroud)

并阅读清单

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

您受到设备内存的限制.使用后台线程来读/写共享首选项是一种很好的做法.


Ali*_*Ali 10

我建议你将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(); }
Run Code Online (Sandbox Code Playgroud)

内部存储文件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();
Run Code Online (Sandbox Code Playgroud)