Tôi làm cách nào để có thể lưu HashMap đến Tùy chọn được chia sẻ trong Android?Làm cách nào để lưu HashMap vào Tùy chọn Chia sẻ?
Trả lời
Tôi không khuyên bạn nên viết các đối tượng phức tạp vào SharedPreference. Thay vào đó tôi sẽ sử dụng ObjectOutputStream
để ghi nó vào bộ nhớ trong.
File file = new File(getDir("data", MODE_PRIVATE), "map");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(map);
outputStream.flush();
outputStream.close();
Map<String, String> aMap = new HashMap<String, String>();
aMap.put("key1", "val1");
aMap.put("key2", "val2");
aMap.put("Key3", "val3");
SharedPreferences keyValues = getContext().getSharedPreferences("Your_Shared_Prefs"), Context.MODE_PRIVATE);
SharedPreferences.Editor keyValuesEditor = keyValues.edit();
for (String s : aMap.keySet()) {
keyValuesEditor.putString(s, aMap.get(s));
}
keyValuesEditor.commit();
nhưng tôi cần phải lưu bản đồ băm như bản thân như chúng tôi thêm vector vào sở thích chia sẻ – jibysthomas
hơn bạn phải sử dụng có thể serialization và lưu HashMap được tuần tự hóa trong SharedPrefs. Bạn có thể dễ dàng tìm thấy mã ví dụ về cách thực hiện điều đó. – hovanessyan
tôi sử dụng để chuyển đổi Gson
HashMap
để String
và sau đó lưu nó vào SharedPrefs
private void hashmaptest()
{
//create test hashmap
HashMap<String, String> testHashMap = new HashMap<String, String>();
testHashMap.put("key1", "value1");
testHashMap.put("key2", "value2");
//convert to string using gson
Gson gson = new Gson();
String hashMapString = gson.toJson(testHashMap);
//save in shared prefs
SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE);
prefs.edit().putString("hashString", hashMapString).apply();
//get from shared prefs
String storedHashMapString = prefs.getString("hashString", "oopsDintWork");
java.lang.reflect.Type type = new TypeToken<HashMap<String, String>>(){}.getType();
HashMap<String, String> testHashMap2 = gson.fromJson(storedHashMapString, type);
//use values
String toastString = testHashMap2.get("key1") + " | " + testHashMap2.get("key2");
Toast.makeText(this, toastString, Toast.LENGTH_LONG).show();
}
Nhưng làm thế nào chúng ta có thể làm điều đó? Bất kỳ mẫu mã nào? –
cách lấy hashmap từ gson tôi nhận được thông báo lỗi như com.qb.gson.JsonSyntaxException: java.lang.IllegalStateException: Dự kiến BEGIN_OBJECT nhưng đã BEGIN_ARRAY ở dòng 1 cột 2 - – Ram
@Ram Tôi đã thêm mã. Có lẽ nó sẽ giúp – penduDev
Tôi đã viết một đoạn mã đơn giản để lưu bản đồ trong sở thích và tải các bản đồ từ sở thích. Không yêu cầu chức năng GSON hoặc Jackson. Tôi chỉ sử dụng một bản đồ có String là khóa và Boolean như một giá trị.
private void saveMap(Map<String,Boolean> inputMap){
SharedPreferences pSharedPref = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
if (pSharedPref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
Editor editor = pSharedPref.edit();
editor.remove("My_map").commit();
editor.putString("My_map", jsonString);
editor.commit();
}
}
private Map<String,Boolean> loadMap(){
Map<String,Boolean> outputMap = new HashMap<String,Boolean>();
SharedPreferences pSharedPref = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString("My_map", (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Boolean value = (Boolean) jsonObject.get(key);
outputMap.put(key, value);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
Bạn có thể thử sử dụng JSON để thay thế.
Đối với tiết kiệm
try {
HashMap<Integer, String> hash = new HashMap<>();
JSONArray arr = new JSONArray();
for(Integer index : hash.keySet()) {
JSONObject json = new JSONObject();
json.put("id", index);
json.put("name", hash.get(index));
arr.put(json);
}
getSharedPreferences(INSERT_YOUR_PREF).edit().putString("savedData", arr.toString()).apply();
} catch (JSONException exception) {
// Do something with exception
}
Để nhận được
try {
String data = getSharedPreferences(INSERT_YOUR_PREF).getString("savedData");
HashMap<Integer, String> hash = new HashMap<>();
JSONArray arr = new JSONArray(data);
for(int i = 0; i < arr.length(); i++) {
JSONObject json = arr.getJSONObject(i);
hash.put(json.getInt("id"), json.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
Là một spin off của câu trả lời Vinoj John Hosan, tôi sửa đổi câu trả lời để cho phép chèn chung chung hơn, căn cứ vào quan trọng của dữ liệu , thay vì một phím duy nhất như "My_map"
.
Khi triển khai, MyApp
là lớp ghi đè Application
và MyApp.getInstance()
hoạt động để trả lại context
.
public static final String USERDATA = "MyVariables";
private static void saveMap(String key, Map<String,String> inputMap){
SharedPreferences pSharedPref = MyApp.getInstance().getSharedPreferences(USERDATA, Context.MODE_PRIVATE);
if (pSharedPref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
SharedPreferences.Editor editor = pSharedPref.edit();
editor.remove(key).commit();
editor.putString(key, jsonString);
editor.commit();
}
}
private static Map<String,String> loadMap(String key){
Map<String,String> outputMap = new HashMap<String,String>();
SharedPreferences pSharedPref = MyApp.getInstance().getSharedPreferences(USERDATA, Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString(key, (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String k = keysItr.next();
String v = (String) jsonObject.get(k);
outputMap.put(k,v);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
Bạn có thể sử dụng điều này trong một chuyên dụng trên prefs chia sẻ tập tin (nguồn: https://developer.android.com/reference/android/content/SharedPreferences.html):
GetAll
thêm vào mức API 1 Bản đồ GetAll() Lấy tất cả các giá trị từ sự sở thích.
Lưu ý rằng bạn không được sửa đổi bộ sưu tập được trả về theo phương pháp này, hoặc thay đổi bất kỳ nội dung nào của nó. Tính nhất quán của dữ liệu được lưu trữ của bạn là không được đảm bảo nếu bạn thực hiện.
Trả về bản đồ Trả về bản đồ có chứa danh sách các cặp khóa/giá trị đại diện cho các tùy chọn.
- 1. Tùy chọn được chia sẻ chỉ lưu lần đầu tiên
- 2. Tùy chọn chia sẻ trên Android không lưu
- 3. Lưu danh sách chuỗi các Chuỗi vào các tùy chọn được chia sẻ
- 4. Xóa các tùy chọn được chia sẻ
- 5. Làm cách nào để lặp qua tất cả các khóa của tùy chọn được chia sẻ?
- 6. Làm cách nào để triển khai chia sẻ qua tùy chọn trong Android?
- 7. Làm cách nào để truy cập vào kho lưu trữ git trên cửa sổ chia sẻ?
- 8. Có bao nhiêu Tùy chọn được chia sẻ quá nhiều?
- 9. Bộ nhớ trong Android VS Tùy chọn được chia sẻ
- 10. Các thư viện được chia sẻ tùy chọn
- 11. Tùy chọn chia sẻ trên Android không hoạt động
- 12. Xem tùy chọn chia sẻ của ứng dụng Android?
- 13. Sự khác biệt giữa chia sẻ và -Wl, đã chia sẻ các tùy chọn GCC
- 14. Biên dịch OpenSSL với tùy chọn 'được chia sẻ'?
- 15. Sự cố khi lưu các tùy chọn được chia sẻ trong Android
- 16. Android: Chia sẻ Bitmap chưa được lưu vào SD
- 17. Làm cách nào để hiển thị bảng tác vụ chia sẻ iOS 6 mặc định với các tùy chọn chia sẻ có sẵn?
- 18. Chia sẻ ý định với tùy chọn Bluetooth Chỉ
- 19. Làm cách nào để chia sẻ dữ liệu giữa các tác vụ Ant tùy chỉnh?
- 20. Cách tốt nhất để sử dụng tùy chọn chia sẻ giữa các hoạt động
- 21. Làm cách nào để đẩy một dự án mới vào một kho lưu trữ Mercurial được chia sẻ?
- 22. Làm thế nào để phân chia một HashMap trong Java
- 23. Django: vps hoặc chia sẻ lưu trữ?
- 24. Trình chọn mục đích chia sẻ Android
- 25. Khi nào là tệp tùy chọn được chia sẻ đầu tiên được tạo?
- 26. cách đặt lại tất cả lưu trữ dữ liệu được lưu trữ bằng cách sử dụng các tùy chọn được chia sẻ
- 27. Làm cách nào để truy cập vào một tệp chia sẻ theo chương trình
- 28. Tùy chọn 'soname' để xây dựng thư viện được chia sẻ là gì?
- 29. Bộ nhớ cache dữ liệu trong Tùy chọn được chia sẻ
- 30. Làm thế nào để lưu trữ HashMap trên Android?
thử này http://stackoverflow.com/a/39435730/6561141 – tpk