2013-08-08 1 views
3

키와 값 쌍 같은 일부 데이터를 내부 저장소에 저장하려고합니다. 그래서 키, 값 쌍을 저장하기 위해 HashMap을 사용하고 있습니다. 그러나이 HashMap을 sharedpreferences에 저장하고 검색하는 데 충분한 해결책은 없습니다. 해결책을 좀주세요.Android : sharedpreferences에서 Hashmap 데이터를 저장하고 검색하는 방법은 무엇입니까?

내가 아래에 내 코드를 삽입하고 :

HashMap<String, String> MapListMesasges = new HashMap<String, String>(); 
MapListMesasges.put(FromName, message.getBody()); 
preferences = mActivity.getSharedPreferences(
           SharePreference_messages_history_name, 
           Context.MODE_PRIVATE); 
         SharedPreferences.Editor editor = preferences.edit(); 
         for (Entry<String, String> entry : MapListMesasges 
           .entrySet()) { 
          editor.putString(entry.getKey(), entry.getValue()); 
         } 
         editor.commit(); 

및 Sharedprefernces에서 데이터를 검색 : 나는 또한 어댑터를 해시 맵 저장하고 목록보기로 설정합니다

preferences = mActivity.getSharedPreferences(
       SharePreference_messages_history_name, Context.MODE_PRIVATE); 
     for (Entry<String, ?> entry : preferences.getAll().entrySet()) { 
      MapListMesasges.put(entry.getKey(), entry.getValue().toString()); 
     } 

. 내 주된 목적은 데이터를 공유 미리보기에 저장 및 검색하고 데이터를 listview에 표시하는 것입니다.

미리 감사드립니다.

+0

당신이 점점되지 않았거나 로그 ??에서 데이터를 인쇄 적이 사용할 수 있습니까? –

+0

무엇이 문제입니까? 값을 검색 할 때 null이 있습니까? –

+2

'SharedPreferences'는 그런 식으로 사용되지 않습니다. 당신은 그런 식으로 사용할 수 있지만 코드는 제대로 작동하는 것처럼 보입니다. 그러나 정의되지 않은 키 집합이있는 경우 데이터베이스 또는 다른 것을 사용하는 것이 좋습니다. – zapl

답변

0

환경 설정에서 HashMap을 저장하는 가장 쉬운 방법은 문자열로 변환하여 저장하는 것입니다.

다른 측면에서 해당 문자열을 HashMap에서 변환하고 즐기십시오.

문자열을 HashMap으로 변환하려면 & this 링크를 확인하십시오.

0

해결책으로 json을 사용할 수 있습니다. 예를 들어

:

**JSON** 

    { 
    [ 
     "name1","message1", 
     "name2","message2" 
    ] 
    } 

스토어 몇 가지 핵심이 전체 JSON 문자열 및 검색하기 위해 동일한 키를 사용합니다. JSON을 구문 분석하거나 작성해야합니다. JSON 생성/파싱을 위해 GSON 라이브러리를 사용할 수 있습니다.

0

설명 된 작업을 수행 할 때는 특별한 것이 있습니다. 이것은 SQLite입니다. 하지만 SharedPreferences에 실제로 저장하려는 경우 할 수 있습니다. 솔루션이 거의 작동합니다. 키를 저장해야합니다.

StringBuilder b = new StringBuilder(); 
for (Entry<String, String> entry : MapListMesasges.entrySet()) { 
     editor.putString(entry.getKey(), entry.getValue()); 
     if(b.length() != 0){ 
      b.append(","); 
     } 
     b.append(entry.getKey()); 
} 
editor.putString("KEY_FOR_PREF_KEYS",b.toString()); 

및 검색 데이터는이

String[] keys = preferences.getString("KEY_FOR_PREF_KEYS","").split(","); 
for (int i = 0; i < keys.length; i++) { 
    MapListMesasges.put(keys[i], preferences.getString(keys[i])); 
} 
관련 문제