Gson 을 이용하여 Shared preference 사용하고 있습니다.
글이 보여지는 Activity A (리사이클러뷰 Adapter와 연결되어있습니다.)
버튼을 눌러서 글을 작성하는 Activity B
1. 첫번째 상황 : 처음으로 앱을 실행하고 글을 추가하면 리사이클러뷰에 제가 추가한 글이 보이고 그 상태에서 앱을 껏다가 켜도
추가된 글들이 남아있습니다.
2. 두번째 상황 : 아까 첫번째 상황에서 추가 한 글들은 남아있지만 , 여기서 문제점이 발생합니다.
문제점은 Activity B로 간뒤 글을 다시 추가를 하면 기존에 첫번째 상황에서 추가된 글의 목록은 Activity A 부분에 보이지않고,
새롭게 스택이 쌓입니다..
기존에 있던 정보에 새로운글이 쌓이게 하는 방법을 찾고 싶어서 글을 올리게되었습니다.
이 문제에서 3일동안 고민을 해봤는데 .. 답이 나오지않아서 요청드립니다.
글이 보여지는 Activity A 에서 Data를 불러오는 코드입니다.
public void loadData() {
Gson gson = new Gson(); // Gson 사용을 위한 객체선언
String json = sharedPreferences.getString("List", null); // xml 파일안에 내가 정의한 Key 값으로 저장된 String 내용을 불러옴.
Type type = new TypeToken<ArrayList<PostList>>() {}.getType(); // Key 값이 저장된 PostList 형식에 맞추어서 객체로 만듬.
postlistaftersave = gson.fromJson(json, type); // 데이터를 받을 객체
if (postlistaftersave == null) { // postlistaftersave 공간에 아무것도 없으면, postlistaftersave은 기존의 있는 데이터를 업데이트 시켜 사용자에게 보여주게되고.
postlistaftersave = postlist1; // 이전에 하드코딩한 애들을 불러온다.
} else {// 저장된 값이 있다면 postlistaftersave 기존의 있는 데이터를 업데이트 시켜 사용자에게 보여주게되고.
postlist1 = postlistaftersave;
}
}
b activity 에서 데이터를 저장하는 코드입니다.
public void SaveData() {
SharedPreferences.Editor editor = sharedPreferences.edit(); // 2. 에디터 객체를 만든후에, 그 에디터 객체에
Gson gson = new Gson(); // 5. Json 배열을 쉐어드에 저장시켜주는 Gson 생성
String json = gson.toJson(postlist1); // 6. 어레이리스트를 Json 형식으로 바꿔준다음 Put String으로 쉐어드안에 기록.
editor.putString("List", json); // 3. 키를 넣고, 데이터를 넣어서
editor.commit(); // 4. shared에 업데이트 시키는법
Log.e(TAG, "AddEditOne Activity 에서 성공적으로 글 저장함." + json);
}
}
postlist1 = myApplication.getPostlist1();입니다
postlist1은 My Application 이라는 클래스에서 데이터를 불러오고 저장을 합니다. My application 클래스 안에 코드들입니다.
public class MyApplication extends Application {
ArrayList<PostList> postlist1 = new ArrayList<PostList>();
private static int nextId = 5;
public MyApplication() {
fillPictureList();
}
private void fillPictureList() {
PostList p0 = new PostList(0,"1","","ㅋㅋㅋㅋ");
PostList p1 = new PostList(1,"2", "ㅋㅋㅋㅋ");