안드로이드 프로그래밍[JAVA Code]/SharedPreferences

SharedPreference : save ArrayList with Json and Gson

훈츠 2019. 11. 29. 15:35
반응형

안드로이드 프로그램에서는 데이터를 다른 화면으로 이동 할때, 그안에 쓰고 있던 데이터를 따로 저장하지 않으면 다시 화면으로 들어왔을때 그값을 확인 할수가 없다.

그래서 안드로이드에서는 SharedPreferences 라는것을 제공하는데, 사용 법에 대해 정리 해본다. 

원시 데이터 String, Int... 와 달리 Object 나 ArrayList 를 SharedPreferences 로 저장 하기 위해서, Json 방식을 이용해 저장 하는방법을 정리 해본다.  

 

0. Gson 사용하기 위해서 그래들에 라이브러리 인스톨 할수 있도록 기입하고, Sync now 를 누른다. 

 

  • build.gradle(Module:app) 폴더 
  • dependencies {
    implementation 'com.google.code.gson:gson:2.8.5'  //설치 시점에 최신버젼을 설치 해준다.
    }
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation 'com.google.code.gson:gson:2.8.5'
}

1. SingerItem 이라는 class 를 만든다. 


public class Singeritem {
    String name;
    String mobile;
    int resId;

    public Singeritem(String name, String mobile, int resId) {
        this.name = name;
        this.mobile = mobile;
        this.resId = resId;
    }
    public Singeritem(String name, String mobile) {
        this.name = name;
        this.mobile = mobile;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public int getResId() {
        return resId;
    }

    public void setResId(int resId) {
        this.resId = resId;
    }

    @Override
    public String toString() {
        return "Singeritem{" +
                "name='" + name + '\'' +
                ", mobile='" + mobile + '\'' +
                ", resId=" + resId +
                '}';
    }
}

2. ArrayList<SingerItem> 으로 지정 

ArrayList<SingerItem> itemtest = new ArrayList<SingerItem>();

itemtest.add( new SingerItem( "number","mobile" ));
itemtest.add( new SingerItem( "number1","mobile1" ));

3. SharedPreferences 정의 하기 

pref = getSharedPreferences( "pref", MODE_PRIVATE );
pref_editor = pref.edit();

4. Gson 객체 만들기 

gson = new Gson();

5. Save 시점 정의 하기 : 편의상 button 의 event click 이용, Gson 객체를 json 객체로 변환 후 pref 객체에 저장. 

savebtn.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                items.add( editName.getText().toString() );
                items.add( editPhone.getText().toString() );
                json = gson.toJson( items );
                pref_editor.putString( "list",json );
                pref_editor.apply();
            }
        } );

6. Load 시점 정의 하기 : 편의상 button 의 event click 이용, 현재 items 객체로 부터 복원 

 loadbtn.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Object Obj0 = items.get( 0 );
                Object Obj1 = items.get( 1 );
                String name = (String) Obj0;
                String mobile = (String) Obj1;

                editName.setText( name);
                editPhone.setText( mobile );
            }
        } );

7. Pref 객체에 저장된 데이터 Load 시점 정의 하기 : 편의상 button 의 event click 이용, pref 객체로 부터 복원 

loadprefbtn.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                json = pref.getString( "list", null );
                Type type = new TypeToken<ArrayList<String>>(){}.getType();
                items = gson.fromJson( json,type );
                Object Obj0 = items.get( 0 );
                Object Obj1 = items.get( 1 );
                String name = (String) Obj0;
                String mobile = (String) Obj1;

                editName.setText( name);
                editPhone.setText( mobile );

                if(items == null){
                    items = new ArrayList<>(  );
                }
            }
        } );

8. 확인 및 테스트. 

 5) save 버튼을 누르지 않고 다른 화면으로 이동후 다시 켠다. save 버튼을 누르고 다시 켠다. 

 6) load 버튼을 누르고 제대로 데이터가 나오는지 확인  -> 안나온다면 3번으로 돌아가 save 버튼 누르고 다시 확인

 7) 다른 화면이 아닌 앱을 종료 시키고 다시 확인 한다. 실제로 sharedpreferences 에 저장되어서 다시 복원되는지 확인한다. 

반응형