ANDROID/Android 앱 프로그래밍

[Android] 간단한 값 저장은 SharedPreferences

주 녕 2021. 5. 27. 17:37
728x90

모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다. 

 

SharedPreferences

앱 안에서 간단한 데이터를 저장하거나 복원할 때 사용

간단한 데이터를 저장해야 하는데 SQLite 같은 DB를 이용하기 번거로운 경우에 사용함

  • 앱 내부에 파일을 하나 만들고, 이 파일 안에서 데이터를 저장하거나 불러올 수 있게 함
  • 실제로 개발할 때는 파일을 만들 필요 없이 SharedPreferences의 저장/복원 메서드를 호출함
  • key - value 형식으로 저장함

[ 예제 ]

public class SaveActivity extends AppCompatActivity {

    @Override
    protected void onPause() {
        super.onPause();
        Toast.makeText(this, "onPause 호출", Toast.LENGTH_SHORT).show();
        saveState();
    }

    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(this, "onResume 호출", Toast.LENGTH_SHORT).show();
        restoreState();
    }

    EditText nameInput;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_save);

        nameInput = findViewById(R.id.save_edittext);

        Button clearButton = findViewById(R.id.clear_btn);
        clearButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                clearState();
                nameInput.setText("");
            }
        });
    }

    protected void restoreState() {
        SharedPreferences preferences = getSharedPreferences("pref", Activity.MODE_PRIVATE);
        if ((preferences != null) && (preferences.contains("name"))) {
            String name = preferences.getString("name", "");
            nameInput.setText(name);
        }
    }

    protected void saveState() {
        SharedPreferences preferences = getSharedPreferences("pref", Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("name", nameInput.getText().toString());
        editor.commit();
    }

    protected void clearState() {
        SharedPreferences preferences = getSharedPreferences("pref", Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.clear();
        editor.commit();
    }

}
  • 액티비티가 화면에서 사라지거나 다시 화면이 복원될 때 그 상태 그대로 보여주기 위해 
    • saveState()는 onPause()에 작성
    • restoreState()는 onResume()에 작성

 

SharedPreference Handle

  • getSharedPreferences() :  여러 개의 SharedPreferences 파일을 사용하는 경우
  • getPreferences() : 1개의 SharedPreferences 파일을 사용하는 경우
public abstract SharedPreferences getSharedPreferences(String name, int mode)

name저장소의 이름을 말하며, modeSharedPreference Constants 중 하나로 설정함

 

SharedPreference Constants

  • MODE_APPEND : 기존 preferences에 신규 preferences를 추가
  • MODE_MULTI_PROCESS : 이미 호출되어 사용 중인지 체크
  • MODE_PRIVATE : 생성한 application에서만 사용 가능
  • MODE_WORLD_READABLE : 다른 application에서 읽을 수 있음
  • MODE_WORLD_WRITEABLE : 다른 application에서 기록할 수 있음

 

SharedPreferences 메소드

  • contains(String key) : 키 값이 들어있는지 체크
  • edit() : SharedPreferences.Editor 객체 생성
  • getAll() : 저장된 모든 값을 검색
  • getBoolean(String key, boolean defValue) : 키에 해당하는 boolean 값 검색 → Float, Int , Long, String, StringSet

 

SharedPreferences.Editor

SharedPreferences.Editor 객체는 데이터를 저장할 수 있도록 edit() 메서드를 제공함

edit() 메서드를 호출한 후 putOOO() 메서드를 호출해야 실제로 저장됨

SharedPreferences.Editor editor = preferences.edit();
  • clear() : 모든 값 삭제
  • commit() : 동기적으로 값을 저장하고 결과(boolean)를 리턴
  • apply() : 비동기적으로 값을 저장
  • remove(String key) : key에 해당하는 값을 삭제
  • putBoolean(String key, boolean value) : bool형 값을 설정 → Float, Int, Long, String, StringSet 마찬가지

💡 putOOO() 작업을 반영하기 위해서는 commit() / apply()를 호출해야 함

💡 remove() 작업을 반영하기 위해서는 commit()을 호출해야 함

 

 

 

 

* 액티비티의 생명주기에 대한 포스팅은 아래 참고!

 

[Android] 액티비티의 생명주기(Life cycle)

모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다. 액티비티의 생명주기(Life Cycle) 액티비티는 처음 실행될 때 메모리에 만들어지는 과정부터 시작해서 실행, 중지, 메모

junyoung-developer.tistory.com

 

728x90