Hashmap을 Sharedpreferences에 저장하고 싶습니다.

조회수 2594회

안드로이드에서 리스트 뷰를 구성하고 있는데 글을 작성하는 액티비티에서 edit text를 통해 스트링 값들을 받고 그 값을 인텐트를 사용하여 메인 액티비티로 보내서 리스트 뷰에 넣어줬습니다. 그리고 나서 그 값들을 해쉬 맵에 넣어주고 그 값들을 프로그램이 꺼져도 저장하도록 Sharedpreferences를 통해 저장하고 싶습니다. 하지만 Sharedprefereces가 기본형 타입만 저장할 수 있다는 문제때문에 어떻게 해야 할지 생각이 막히네요..

    String test1 = data.getStringExtra("tex1");
                String test2 = data.getStringExtra("tex2");
                String test3 = data.getExtras().getString("tex3"); //인텐트를 받아서 스트링으로 저장





                arItem.add(new ListViewItem(test1, test2, test3)); // 인텐트들을 추가
                ArrayList<HashMap<String , String>> aritem_hash= new ArrayList<HashMap<String , String>>();
                for(ListViewItem item : arItem){
                    HashMap map = new HashMap();
                    map.put("Date",item.DateSrc);
                    map.put("Title",item.titleStr);
                    map.put("Local",item.LocalStr);
                    aritem_hash.add(map);

                }  //해쉬맵으로 저장

1 답변

  • HashMap을 serialize 해서 저장하고, 읽을 때는 deserialize 해서 복원하면 되지 않을까요?

      // 저장하기
      SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
      Editor editor = prefs.edit();
      try {
        editor.putString(STORED, ObjectSerializer.serialize(aritem_hash));
      } catch (IOException e) {
        e.printStackTrace();
      }
      editor.commit();
    
     // 복원하기
      SharedPreferences prefs = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
    
      try {
        aritem_hash = (ArrayList<HashMap<String , String>>) ObjectSerializer.deserialize(prefs.getString(STORED, ObjectSerializer.serialize(new ArrayList<task>())));
      } catch (IOException e) {
        e.printStackTrace();
      } catch (ClassNotFoundException e) {
        e.printStackTrace();
      }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)