반응형
모든 내용은 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은 저장소의 이름을 말하며, mode는 SharedPreference 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 > Android 앱 프로그래밍' 카테고리의 다른 글
[Android] 브로드캐스트(Broadcast) (0) | 2021.06.11 |
---|---|
[Android] 서비스(Service) (0) | 2021.06.09 |
[Android] 탭(Tab)과 바텀 내비게이션(Bottom Navigation) (0) | 2021.06.08 |
[Android] 프래그먼트(Fragment) (0) | 2021.05.31 |
[Android] 액티비티의 생명주기(Life cycle) (0) | 2021.05.25 |
[Android] 태스크(Task) 관리 (0) | 2021.05.25 |
[Android] 플래그(flag)와 부가 데이터(Extra Data) (0) | 2021.05.24 |
[Android] 인텐트(Intent) (0) | 2021.05.21 |
댓글