지난 포스팅에서는 SharedPreferences 에 대해 알아보았다.
이번 포스팅에서는 SharedPreferences 를 직접 사용해보자.
SharedPreferences 사용 예제
테스트해 볼 예제의 내용을 간단히 설명하겠다.
● EditText 에 데이터를 입력하고 버튼을 누른다.
● TextView 에 데이터가 표시되고, SharedPreferences 에 저장된다.
● SharedPreferences 파일을 찾아서 저장된 내용을 확인한다.
● 앱이 시작되면 데이터를 불러와서 표시되게끔 한다.
● 앱을 종료 & 재시작하고 데이터가 표시되는지 확인한다.
각각 3개의 TextView 와 EditText 를 세팅한 레이아웃이다.
레이아웃 xml 코드는 따로 첨부하지 않겠다.
이제 java 코드도 기본적인 세팅을 해준다.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 객체와 View 연결
TextView name_Text = findViewById(R.id.name_Text);
TextView age_Text = findViewById(R.id.age_Text);
TextView nickname_Text = findViewById(R.id.nickname_Text);
EditText name_EditText = findViewById(R.id.name_EditText);
EditText age_EditText = findViewById(R.id.age_EditText);
EditText nickname_EditText = findViewById(R.id.nickname_EditText);
Button button = findViewById(R.id.apply_Btn);
// 버튼 클릭 이벤트
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// EditText 입력 데이터를 변수에 초기화
String name = name_EditText.getText().toString();
String age = age_EditText.getText().toString();
String nickname = nickname_EditText.getText().toString();
// 위 변수를 TextView 에 표시해줌
name_Text.setText(name);
age_Text.setText(age);
nickname_Text.setText(nickname);
// EditText 칸을 깔끔히 비워줌
name_EditText.setText("");
age_EditText.setText("");
nickname_EditText.setText("");
}
});
}
}
SharedPreferences 를 작성하기 전의 코드라서, 핵심적인 내용은 없지만
이해를 돕기 위해 주석을 틈틈이 작성해놓았으니 읽어보기 바란다.
입력 칸에 정보를 모두 입력하고, 버튼을 누르면
상단의 TextView 에 데이터가 표시된다.
하지만, 앱을 종료 & 재시작하면 데이터가 초기화되는 것을 확인할 수 있다.
SharedPreferences 에 데이터 저장하기
데이터를 저장하는 문법은 다음과 같다.
SharedPreferences sharedPreferences = getSharedPreferences("저장될 파일 이름",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("Key","Value");
editor.commit();
결론만 보면, 큰 따옴표("") 표시된 부분만 수정하여 사용하면 된다.
● getSharedPreferences() 메서드의 매개변수는 다음과 같다.
1. 저장될 파일 이름 지정
이전 글에서도 설명했지만, SharedPreferences 는
데이터를 파일 형식으로 저장한다.
여기에서 그 파일의 이름을 지정해 줄 수 있다.
2. MODE 지정
저장된 파일을 관리할 방식을 지정해준다.
-MODE_PRIVATE
생성한 앱에서만 관리할 수 있다.
-MODE_APPEND
데이터를 덧붙여 쓸 수 있다.
-MODE_NO_LOCALIZED_COLLATORS :
데이터 정렬기를 지원하지 않고 DB가 열린다.
-MODE_ENABLE_WRITE_AHEAD_LOGGING
DB가 열리고 미리 쓰기 로깅이 활성화 된다.
-MODE_MULTL_PROCESS : Deprecated
-MODE_WORLD_READABLE : Deprecated
-MODE_WORLD_WRITEABLE : Deprecated
특별한 경우가 아니라면, MODE_PRIVATE 를 사용하면 된다.
● editor.putString() 메서드의 Key - Value 방식은
앞서 알아보았던 Intent 의 방식과 매우 유사하다.
● editor.commit() 메서드는 SharedPreferences 의 데이터가
변경될 때마다 작성해주어야 한다. (저장, 삭제 등)
이제 MainActivity.java 코드에 SharedPreferences 를 작성해주자.
@Override
public void onClick(View view) {
// SharedPreferences 에 저장하기
SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("이름",name);
editor.putString("나이",age);
editor.putString("별명",nickname);
editor.commit();
}
MainActivity.java 전체 코드는 위에 첨부하였으니,
onClick 메서드 부분만 작성하였다.
해당 위치에 잘 끼워 넣길 바란다.
이제, 앱을 실행시켜서 정보를 입력하고 버튼을 눌러보자.
SharedPreferences 파일 확인
SharedPreferences 에 저장이 잘 되었다면,
파일이 생성되었을 것이다. 한 번 찾아보자.
먼저, Device File Explorer 탭을 찾으면 된다.
안스 버전에 따라서 우측 하단에 전용 탭이 있을 수도 있고,
좌측 상단에 View > Tool Windows 탭에 있을 수도 있다.
보통의 경우, 패키지 이름(앱 이름)의 폴더가 생성되어 있을 것이다.
해당 폴더를 찾아가 보면, SharedPreferences 폴더가 생성된 것을 확인할 수 있다.
그리고 그 폴더 안에는, 작성한 이름의 파일이 생성되어 있다.
작성했던 Key - Value 형태의 데이터가 파일로 저장된 것을 확인할 수 있다.
SharedPreferences 에 저장된 데이터 불러오기
데이터가 파일 형태로 잘 저장된 것까지 확인했다면,
이제 필요한 상황에서 데이터를 불러올 줄 알아야 한다.
데이터를 불러오는 문법은 다음과 같다.
SharedPreferences sharedPreferences = getSharedPreferences("저장된 파일 이름",MODE_PRIVATE);
sharedPreferences.getString("Key","defaultValue");
● 첫 번째 줄은 데이터를 저장할 때와 동일하다.
물론, getSharedPreferences() 메서드의 첫 번째 매개변수인
'저장된 파일 이름' 역시 동일해야 한다.
● 두 번째 줄을 유심히 봐야한다.
getString() 메서드의 매개변수 역시, 첫 번째 매개변수는 동일하다.
저장된 'Key' 값과 동일한 'Key' 의 데이터를 받아온다.
두 번째 매개변수에는 'defaultValue' 가 들어간다.
해당하는 'Key' 값이 존재하지 않을 시, 대체 될 값을 입력해주면 된다.
보통의 경우, 두 번째 줄의 코드를 String 변수에 초기화해서 사용한다.
이제 MainActivity.java 코드에 작성해준다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
String name = sharedPreferences.getString("이름","");
String age = sharedPreferences.getString("나이","");
String nickname = sharedPreferences.getString("별명","");
name_Text.setText(name);
age_Text.setText(age);
nickname_Text.setText(nickname);
}
onCreate() 메서드 부분만 첨부하겠다.
앱이 실행되고, onCreate() 메서드가 호출되면 SharedPreferences 에
저장된 데이터를 불러와서 TextView 에 표시해 줄 것이다.
실행 결과는 다음과 같다.
앱을 종료하고 재실행하여도 데이터가 저장되어 있는 것을 확인할 수 있다.
SharedPreferences 에 저장된 데이터 삭제하기
데이터를 저장했다면, 삭제하는 방법 또한 알아야 한다.
데이터를 삭제하는 방법에는 2가지가 있다.
// 특정 데이터만 삭제
SharedPreferences sharedPreferences = getSharedPreferences("파일 이름",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove("삭제할 데이터 Key값");
editor.commit();
// 전체 삭제
SharedPreferences sharedPreferences = getSharedPreferences("파일 이름",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
remove() 메서드를 사용하여 일부 데이터만 삭제하는 방법과,
clear() 메서드를 사용하여 데이터 전체를 삭제하는 방법이 있다.
상황에 따라 알맞는 메서드를 사용하길 바란다.
SharedPreferences 응용하기
SharedPreferences 는 1Key - 1Value 방식을 원칙으로 한다.
하지만, 개발자란 역시 응용할 줄 알아야 하는 법이다.
누군가는 여러개의 Key 를 관리하는 것조차 불필요하다고 느낄 수 있다.
그리하여, 1Key - 다중 Value 방식으로 응용해보도록 하자.
과정을 먼저 설명하자면, 다음과 같다.
● 여러 Value 값을 하나의 String 에 이어 붙여서 욱여넣고 저장한다.
- 겉으로는 1Key - 1Value 인 것처럼 보여지는 것이다.
● SharedPreferences 에 저장된 데이터를 불러온다.
● 불러온 데이터를 split 을 사용해 나눠준다.
● 나눠진 데이터를 알맞게 적용시킨다.
*split() 메서드는 해당 문자를 기준으로 문자열을 분리해주는 함수이다.
먼저, SharedPreferences 에 저장하는 문법을 수정해준다.
SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("정보",name + "," + age + "," + nickname);
editor.commit();
putString() 의 두 번째 매개변수에 데이터가 욱여넣어진 모습이다.
데이터 사이에는 반점(,) 을 추가해 주었다.
위에서 해보았던 대로, SharedPreferences 파일을 확인해보자.
데이터가 의도한 대로 파일에 잘 저장된 것을 확인하였다.
이제 저장한 데이터를 불러오는 부분을 수정해준다.
SharedPreferences sharedPreferences = getSharedPreferences("사용자 정보",MODE_PRIVATE);
String userInfo = sharedPreferences.getString("정보","");
// 1번
String[] info = userInfo.split(",");
// 2번
String name = info[0];
String age = info[1];
String nickname = info[2];
name_Text.setText(name);
age_Text.setText(age);
nickname_Text.setText(nickname);
① split() 으로 나눠진 데이터를 배열에 담아준다.
데이터를 저장할 때 반점(,)을 추가해 준 이유는 split() 함수를 사용하기 위함이다.
반점이 아닌, 다른 문자를 사용해도 무방하다.
② 배열에 담긴 데이터를 각각의 변수에 초기화 해준다.
응용 결과 역시 성공적이다.
1 Key - 다중 Value 방식으로 SharedPreferences 를 구현하였다.
이번 포스팅까지, SharedPreferences 에 대해 알아보았다.
데이터 저장 방식에 있어서는, 비록 정석적인 DB 방식이 아니었지만
데이터를 처음 저장해 보았다는 것은 큰 의미가 있었다.
'Android (안드로이드)' 카테고리의 다른 글
[Android] 9-Patch Image / 이미지 부분 확장 / 채팅 말풍선 이미지 (3) | 2023.10.01 |
---|---|
[Android] 지도 API 종류와 선택 - 구글 맵, 카카오 맵, 네이버 맵 (0) | 2023.05.09 |
[Android] SharedPreferences (1) - 특징, 사용처 / 데이터 저장 / 데이터 불러오기 (0) | 2022.09.07 |
[Android] 애니메이션 효과 / animation / View 움직임, 이동 / 트윈 애니메이션 (2) | 2022.09.06 |
[Android] visibility 속성 / visible, invisible, gone / 표시, 숨김 (0) | 2022.09.02 |