0. 데이터를 저장하고 읽는 시점
데이터를 저장하는 이유는 보통 Activity가 재실행될 때 이전의 상태를 저장해놓기 위해서이다. 따라서 onPause()가 호출될 때 데이터를 저장하는 것이 좋다.
데이터를 읽을 때는 onCreate()처럼 초기화하는 시점이나 저장한 데이터가 필요한 시점에 읽어서 사용하면된다.
1. SharedPreferences 객체 생성
SharedPreferences sharedPreferences = getSharedPreferences(String 파일 이름, int mode);
매개변수
1. 파일 이름은 식별가능한 id
2. Mode
- MODE_PRIVATE : 자기 앱 내에서 사용, 외부 앱에서 접근 불가
- MODE_WORLD_READABLE : 외부 앱에서 읽기 가능
- MODE_WORLD_WRITABLE : 외부 앱에서 쓰기 가능
2. SharedPreferences로 데이터 저장
SharedPreferences.Editor editor = sharedPreferences.edit(); // Editor 객체 생성
editor.putString("test", value); // 저장할 data와 key값
1. .edit()으로 Editor 객체를 생성한다.
2. 객체에 putInt(), putString()과 같은 메서드를 사용하여 값을 저장한다.
- putInt()
- putString()
- putLong()
- putBoolean()
- putFloat()
- putStringSet()
3. commit(동기) / apply(비동기)
put을 했다고 바로 xml파일에 저장되는 것은 아니다. 데이터를 파일에 저장하려면 apply()나 commit()을 호출해야한다. commit()은 동기적으로 동작하기 때문에 처리 중인 thread가 blocking될 수 있다. 따라서 저장될 때까지 기다릴 필요가 없다면 비동기식으로 동작하는 apply()를 사용하는 것이 좋다.
editor.apply();
3. 데이터 읽기
String value = sharedPreferences.getString("test","");
- String getString(String key, String defValue)
- int getInt(String key, int defValue)
- long getLong(String key, long defValue)
- float getFloat(String key, float defValue)
- boolean getBoolean(String key, boolean defValue)
- Set getStringSet(String key, Set defValue)
4. 모든 데이터 삭제
1. editor.clear()로 모든 데이터를 삭제하고
2. apply()로 삭제된 내용을 파일에 저장한다.
editor.clear();
editor.apply();
5. Set 객체 활용
데이터의 순서가 상관없다면 List보단 Set을 쓰는 것을 권장한다.
6. 전체 코드
MainActivity.java
package com.example.myapplication;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText et_save;
private String shared = "";
// 앱을 실행했을때
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sharedPreferences = getSharedPreferences(shared,0);
String value = sharedPreferences.getString("test","");
et_save = findViewById(R.id.et_save);
et_save.setText(value);
}
// 액티비티를 벗어낫을때 액티비티가 파괴됨
@Override
protected void onDestroy() {
super.onDestroy();
SharedPreferences sharedPreferences = getSharedPreferences(shared,0);
SharedPreferences.Editor editor = sharedPreferences.edit();
String value = et_save.getText().toString();
editor.putString("test", value);
editor.apply();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_save"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
- Ref
'Application Programming > Android' 카테고리의 다른 글
[Android/Java] drawer menu (0) | 2021.06.12 |
---|---|
[Android/Java] WebView (0) | 2021.06.12 |
[Android/Java] Intent (0) | 2021.06.12 |
[Android/Java] menu (0) | 2021.06.06 |
[Android/Java] Canvas, touch event 처리 (0) | 2021.06.06 |