[ 안드로이드 비휘발성 데이터 저장 방법 ]
: 비휘발성 데이터는 앱이 종료되어도 데이터가 남아 있고 다시 앱을 실행했을 때 해당 데이터를 다시 가져올 수 있는 것을 말한다.
[ Preference ]
SharedPreferences
- 프로그램 설정 정보 (ex: 알림 설정, 자동 로그인 설정 등...)
- XML 포맷의 텍스트 파일에 키-값 세트로 저장됨
- 외부에서 못 읽어들임 (응용 프로그램의 고유한 정보이므로)
=> 응용 프로그램 내의 액티비티 간에 공유하며 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있음
getSharedPreferences (name, mode)
- 여러개의 Shared Preferences 파일들을 사용하는 경우
- name : Preference data를 저장할 XML 파일의 이름이다
- mode : 파일의 공유 모드
-> MODE_PRIVATE : 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
-> MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE 은 보안상 이유로 API level 17 에서 deprecated 됨
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
ㄴ> getString 을 사용해서 putString 으로 전달한 데이터를 가져온다
- getSharedPreferences 는 대부분의 타입의 데이터를 사용할 수 있다
=> putBoolean / putFloat / putInt / putLong / putString / putStringSet
- SharedPreferences 클래스
=> 프로그램의 설정 정보 (사용자의 옵션 선택 사항이나 프로그램의 구성 정보) 를 영구적으로 저장하는 용도로 사용
package com.example.shared_preferences
import android.os.Bundle
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.shared_preferences.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.btnSave.setOnClickListener {
saveData()
Toast.makeText(this, "Data 저장 성공", Toast.LENGTH_SHORT).show()
}
loadData()
}
// 데이터를 저장하는 함수
private fun saveData() {
val pref = getSharedPreferences("pref", 0)
val edit = pref.edit() // pref의 수정 모드
// putString 의 첫 번째 인자는 키, 두 번째 인자는 실제 데이터 값
edit.putString("name", binding.etHello.text.toString())
edit.apply() // 저장 완료
}
// 데이터를 불러오는 함수
private fun loadData() {
val pref = getSharedPreferences("pref", 0)
// pref.getString()
// 첫 번째 인자는 키, 두 번째 인자는 데이터가 존재하지 않을 경우의 값
binding.etHello.setText(pref.getString("name", ""))
}
}
ㄴ> saveData() 에는 데이터를 저장하고 loadData() 함수를 사용해서 데이터를 불러온다. loadData() 는 앱이 실행되는 onCreate() 때 같이 호출되며 이전에 저장했던 정보를 앱이 시작하는 시점에 가져와 정보를 유지할 수 있도록 한다.
[ 테스트 화면 ]
EditText를 만들어 text 입력 후 저장 버튼을 누르면 입력한 text를 저장하고 앱을 다시 열면 저장된 text가 그대로 유지될 수 있도록 간단하게 구현 (SharedPreferences 를 쓰지 않는 경우, text는 저장되지 않음)
'Android' 카테고리의 다른 글
(Android / Kotlin) - Room 을 사용한 데이터 유지 (0) | 2024.08.16 |
---|---|
(Android) - MVVM 패턴 (ViewModel, LiveData, Observer) (0) | 2024.06.26 |
(Android Studio) - Dialog 사용하기 (0) | 2024.04.23 |
(Android Studio) - 프래그먼트의 데이터 전달 (0) | 2024.04.17 |
(Android Studio) - RecyclerView 사용 방법 (0) | 2024.04.16 |