마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sharedPreferences gson을 이용하여 arrayList 저장하고 로드하는 문제..

0 추천
@Override
public void onEvent(List<Users> usersList, int position) {


    recentList.add(i,usersList.get(position));
    Log.e("zzzz", String.valueOf(i));
    Log.e("zzzz", String.valueOf(recentList));

    if(i>0) {
        for(int k=0;k< i;k++){
            if(recentList.get(i).name == recentList.get(k).name){
                recentList.remove(k);
                i--;
                break;
            }
        }
    }
    i++;
    saveData(recentList);
}
public  void saveData(List<Users> list){

    SharedPreferences sharedPreferences = getSharedPreferences("ref8",MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();

    Gson gson = new Gson();

    String json = gson.toJson(list); // 자바 obj -> json

    editor.putString("list", json);
    editor.putInt("index",i);
    editor.apply();
}

public void loadData(){
    SharedPreferences sharedPreferences = getSharedPreferences("ref8",MODE_PRIVATE);
    Gson gson = new Gson();

    String json = sharedPreferences.getString("list", null);
    Type type = new TypeToken<ArrayList<Users>>() {}.getType();

    recentList = gson.fromJson(json,type); // json -> 자바 obj
    i = sharedPreferences.getInt("index",i);


    if(recentList == null){
        recentList = new ArrayList<>();
    }
}
saveData를 하면 잘 저장되고 앱 종료후 나갔따 들어와도 onCreate()에서 
loadData를 하여 데이터도 잘 받아옵니다.
문제는 
com.example.project_money.Users@84ad6d1, com.example.project_money.Users@b30ecc9
 
com.example.project_money.Users@ec270af, com.example.project_money.Users@d797cbc
loadData를 하고 recentList를 출력해보면 저렇게 값이 다릅니다.
데이터는 잘 찍히는데 달라서 for문에서 remove하는 로직(중복을 제거하는)
이 동작되지않습니다. 제 생각에는 loadData()를 해서 값이 변경되는거 같은데 
왜그런건가요??
 
태호윤 (140 포인트) 님이 2019년 7월 24일 질문

1개의 답변

0 추천

String 객체 비교는 == 이 아니라 equals로 하셔야 합니다.

 

사족인데.. 루프 중 recentList.remove(k) 로 중복을 제거 하시는데,   remove 시 들어있는 인덱스 번호가 달라지다보니 

문제가 발생할 가능성이 높은 코드로 생각됩니다.
 https://bestalign.github.io/2015/08/31/top-10-mistakes-java-developers-make-1/ 의 3번 사항을 참조 해보세요.

익명사용자 님이 2019년 7월 30일 답변
2019년 7월 30일 수정
...