2017-10-12 4 views
0

API를 사용하여받은 데이터를 저장하려면 HashMap을 사용했습니다. 그 후 SharedPreferences를 사용하여받은 HashMap 데이터를 저장했습니다. 저장 부분이 완료되었습니다. SharedPreferences를 사용하여 저장하려는 레코드 수를 볼 수 있습니다. 여기 해시 맵 데이터 SharedPreferences 검색

데이터 저장하는 코드이다 : 위의 단계 이후

if (result != null && result.length() > 0) 
{ 
    for (int j = 0; j < result.length(); j++) 
    { 
     JSONObject resultObj = result.getJSONObject(j); 
     String label_id = resultObj.getString("label_id"); 
     String arabic = resultObj.getString("arabic"); 
     String english = resultObj.getString("english"); 
     String key = resultObj.getString("key"); 

     //Create a new model and set the received value 
     LabelModel labelModel = new LabelModel(); 
     labelModel.setLabelId(label_id); 
     labelModel.setArabic(arabic); 
     labelModel.setEnglish(english); 
     labelModel.setKey(key); 

     int label = Integer.parseInt(label_id); 
     //Put the value 

     map.put(label, labelModel); 
    } 
} 

//With the below line, I stored the hashMap data using SharedPreferences 
Pref.setValue(mActivity, AppPrefrences.PREF_LABELS, map); 

, I는 에 코드 세트를 따라가내가 애플리케이션 사용 된 SharedPreferences 저장 SharePreferences의 값을 얻을 설정 . 내가 된 SharedPreferences에 저장된 데이터를 검색하기 위해 노력하고, 지금

public static String PREF_LABELS ="labels"; 

public static void setValue(@NonNull Context context, String key, Object obj) { 
    Pref.openPref(context); 
    Editor prefsPrivateEditor = Pref.sharedPreferences.edit(); 
    prefsPrivateEditor.putString(key, String.valueOf(obj)); 
    prefsPrivateEditor.commit(); 
    prefsPrivateEditor = null; 
    Pref.sharedPreferences = null; 
} 

@Nullable 
public static String getValue(@NonNull Context context, String key, Object obj) { 
    Pref.openPref(context); 
    String result = Pref.sharedPreferences.getString(key, String.valueOf(obj)); 
    Pref.sharedPreferences = null; 
    return result; 
} 

:이를 위해 는,이 아래의 코드를 사용했다. 가 여기에 데이터 검색하는 데 사용되는 코드입니다 : 나는 응용 프로그램을 디버깅 할 때

String labels = Pref.getValue(mActivity, AppPrefrences.PREF_LABELS, ""); 

을, 나는 레이블 형식 아래의 값을 얻는다. 내가받은 동일한 수의 기록.

형식은 다음과 같이 진행됩니다

{572=com.*****[email protected], 598=com.*****[email protected], 590=com.*****[email protected], 103=com.*****..........} 

는 어떻게이 형식에서 각 데이터 얻을 수

?

+0

저장 resultObj.toString 같은 환경에 저장지도를 변환! –

답변

2

된 SharedPreferences에서 HashMap를 지원하지 않습니다에 기입 할 ObjectOutputStream를 사용할 수 있습니다. 따라서 HashMap을 문자열로 직접 변환하여 저장할 수는 없지만 JSON 문자열로 변환 할 수 있습니다. 이 경우 google-gson을 사용할 수 있습니다. 이런 식으로 뭔가 :

compile 'com.google.code.gson:gson:2.8.2' 

이 원하는대로의 HashMap 객체에서 저장 :

Editor prefsEditor = mPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(map); 
prefsEditor.putString("YourHashMap", json); 
prefsEditor.commit(); 

이 선호에서 HashMap의 객체를 가져옵니다 :

Gson gson = new Gson(); 
String json = mPrefs.getString("YourHashMap", ""); 
HashMap map = gson.fromJson(json, HashMap.class); 
1

개체 기본값 toString() 메서드는 hashcode을 사용하기 때문에 {572=com.*****[email protected], 598=com.*****[email protected], 590=com.*****[email protected], 103=com.*****..........}이 발생합니다.

에 복잡한 개체를 저장하는 경우 SharedPreference은 권장되지 않습니다. SharedPreference는 HashMaplink을 지원하지 않습니다.

간단한 개체를 저장하려면 문자열을 사용하여 toString() 메서드로 개체를 변환해야합니다. Gson을 사용하여 개체를 String으로 변환 할 수 있으며 이는 쉬운 해결책입니다.

또한 내부 메모리 check this link

1

당신이해야

먼저, 종속성을 포함 lables 문자열을 hashmap 객체로 캐스트 이것은 하나의 해결책입니다. 좀 더 일반적인 것으로 만들고 싶다면 StringUtils 라이브러리를 사용할 수 있습니다.

String value = "{first_name = mohit,last_name = mathur,gender = male}"; 
value = value.substring(1, value.length()-1);   //remove curly brackets 
String[] keyValuePairs = value.split(",");    //split the string to creat key-value pairs 
Map<String,String> map = new HashMap<>();    

for(String pair : keyValuePairs)      //iterate over the pairs 
{ 
    String[] entry = pair.split("=");     //split the pairs to get key and value 
    map.put(entry[0].trim(), entry[1].trim());   //add them to the hashmap and trim whitespaces 
} 

예를 들어, 전환 할 수 있습니다

value = value.substring(1, value.length()-1); 

value = StringUtils.substringBetween(value, "{", "}"); 

같은 LabelModel 에서 그

당신은 주조한다 값 이후

1

대신 문자열 구문 분석이 가장 좋습니다으로 검색보다 문자열을 GSON 문자열로 공유 우선) (이

//convert to string using gson 
    Gson gson = new Gson(); 
    String mapString = gson.toJson(map); 

    //save this in the shared prefs 
    SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE); 
    prefs.edit().putString("yourkey", mapString).apply(); 

    //get from shared prefs in gson and convert to maps again 
    String storedHashMapString = prefs.getString("yourkey",null); 
    java.lang.reflect.Type type = new TypeToken<HashMap<String, String>>(){}.getType(); 

     //Get the hashMap 
    HashMap<String, String> map = gson.fromJson(storedHashMapString, type);