2012-05-30 7 views
9

Tôi đã tự hỏi liệu có thể lưu trong tùy chọn được chia sẻ một mảng Strings hay không, theo cách mà mỗi lần chúng ta lưu một chuỗi nhất định, chúng ta lưu trữ nó trong mảng đó.Lưu trữ một mảng String trong SharedPreferences

Ví dụ: tôi có danh sách các vị trí có ID nhất định mà tôi muốn đánh dấu là yêu thích. Tình huống lý tưởng, có một mảng và lưu một ID vị trí nào đó (hãy gọi nó là Location1) trong mảng đó, vì vậy lần sau tôi muốn đánh dấu một vị trí mới là ưa thích (hãy gọi nó là Location2), tôi lấy mảng đó (cho đến nay chứa Location1) và thêm ID của vị trí mới này mà tôi muốn thêm (Location2).

Android có các phương pháp để lưu trữ các đối tượng nguyên thủy, nhưng không có đối với mảng. Bất kỳ ý tưởng nào để thực hiện việc này, vui lòng?

+0

tiền tố chia sẻ AFAIK sử dụng cho loại dữ liệu nguyên thủy –

+0

http://stackoverflow.com/questions/7873682/is-it-possible-to-stored-classs-static-object-in-shared-preferenc e) 7873759 # 7873759 –

Trả lời

1

Viết các phương thức để đọc và viết một mảng được tuần tự hóa. Điều này không quá khó. Chỉ cần flatten mảng chuỗi thành một chuỗi duy nhất mà bạn lưu trữ trong các sở thích. Một tùy chọn khác sẽ là chuyển đổi mảng thành một cấu trúc XML mà bạn sau đó lưu trữ trong các sở thích, nhưng đó có lẽ là quá mức cần thiết.

23

Đây là doable: I was just blogging about it:

LƯU ARRAY BẠN

//String array[] 
//SharedPreferences prefs 
Editor edit = prefs.edit(); 
edit.putInt("array_size", array.length); 
for(int i=0;i<array.length; i++) 
    edit.putString("array_" + i, array[i]); 
edit.commit(); 

lấy ARRAY BẠN

int size = prefs.getInt("array_size", 0); 
array = new String[size]; 
for(int i=0; i<size; i++) 
    prefs.getString("array_" + i, null); 

Chỉ cần viết rằng có thể có lỗi chính tả.

+3

Kiểm tra câu trả lời của bài đăng này. http://stackoverflow.com/questions/7057845/save-arraylist-to-sharedpreferences – AndroidLearner

+0

@Sherif elKhatib nó hoạt động giống như một sự quyến rũ! cảm ơn rất nhiều – noloman

+0

@noloman chào mừng bạn kiểm tra các chức năng của blog .. tổng quát hơn –

15

Bạn có thể làm cho mảng một mảng JSON và sau đó lưu nó như thế này:

SharedPreferences settings = getSharedPreferences("SETTINGS KEY", 0); 
SharedPreferences.Editor editor = settings.edit(); 

JSONArray jArray = new JSONArray(); 
try { 
    jArray.put(id); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

editor.putString("jArray", jArray.toString()); 
editor.commit(); 

Sau đó bạn có thể nhận được các mảng như thế này:

SharedPreferences settings = getSharedPreferences("SETTINGS KEY", 0); 
try { 
    JSONArray jArray = new JSONArray(settings.getString("jArray", "")); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

Chỉ cần một giải pháp thay thế mà tôi đã sử dụng trong quá khứ