데이터 저장하는 방법 (앱 내에서 데이터를 저장했다가 다시 켤 때에도 저장하게 하는거..)
1 . SharedPreference
2. 데이터베이스
3. 파일
1. Preference
: 프로그램의 설정 정보(사용자의 옵션 선택 사항이나 프로그램의 구성 정보)를 영구적으로 저장하는 용도로 사용
(ex. 자동로그인을 할건지 안 할건지, 알림 울릴건지 여부 등...)
- xml 포맷의 텍스트 파일에 키-값 세트로 정보를 저장 (ex. 알림-true 등)
* SharedPreference 클래스 : Preferences의 데이터(키-값 세트)를 관리하는 클래스
- 응용 프로그램 내의 액티비티 간에 공유
- 한쪽 액티비티에서 수정 시 다른 액티비티에서도 수정된 값을 읽을 수 있음
- 응용 프로그램의 고유한 정보이므로 외부에서는 읽을 수 없음
2. 공유 환경설정의 핸들 가져오기
1) getSharedPreferences (name, mode) // name(키값), mode(value?)를 인자로 넘긴다
: 여러개의 Shared Preference 파일들을 사용하는 경우
- name : 프레퍼런스 데이터를 저장할 xml 파일의 이름
- mode : 파일의 공유 모드
(1) MODE_PRIVATE : 생성된 XML 파일은 호출한 애플리케이션 내에서만 읽기 쓰기가 가능
(2) MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE은 보안상 이유로 API level 17에서 deprecated 됨
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE )
- 사용 가능한 데이터 타입
2) getPreferences
: 한 개의 Shared Preference 파일을 사용하는 경우 (잘 사용하지 않음...)
- Activity 클래스에 정의된 메소드이므로, Activity 인스턴스를 통해 접근 가능
- 생성한 액티비티 전용이므로 같은 패키지의 다른 액티비티는 읽을 수 없음
- 액티비티와 동일한 이름의 xml 파일 생성
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
3. 예제
: EditText를 만들어 text 입력 후, 저장 버튼 누르면 입력한 text 저장하고 앱 다시 열면 저장된 text가 그대로 유지되는..
(with empty activity 로 프로젝트 생성...? 이랬더니 이상해서 그냥 사용하던거 씀...)
- 저장된 내용 확인하는 방법
좌측 점3개 > Device Explorer > com.@@@@ 현재 파일 찾은 뒤 > shared_prefs 폴더 안 xml 확인
( name이라는 키로 저장됨... 이게 안 뜨면 Device Explorer 에서 해당 파일 찾은 뒤 우클릭 > synchronize 누르기)
[SharedPreferenceExercise02]
1. xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity">
<EditText
android:id="@+id/et_hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:textColor="#000000"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_save"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="54dp"
android:text="저장하기"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/et_hello" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. 메인
package com.example.sharedpreferenceexercise02
//import com.android.preference.databinding.ActivityMainBinding
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.sharedpreferenceexercise02.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 Saved.", Toast.LENGTH_SHORT).show()
}
loadData()
}
private fun saveData() {
//pref라는 파일 네임으로 preference를 만든다..
val pref = getSharedPreferences("pref",0)
//edit를 할 때, putString으로 name이라는 키에 에딧텍스트 안의 텍스트를 집어넣음.
val edit = pref.edit() // 수정 모드
// 1번째 인자는 키, 2번째 인자는 실제 담아둘 값
edit.putString("name", binding.etHello.text.toString())
//apply로 저장
edit.apply() // 저장완료
}
//불러오기
private fun loadData() {
//pref라는 이름으로 preferenece를 만들고
val pref = getSharedPreferences("pref",0)
//getString을 함... 키값을 가지고.
// 그 뒤 setText로 editText에 집어넣게 됨
// 1번째 인자는 키, 2번째 인자(defValue)는 데이터가 존재하지 않을경우의 값
binding.etHello.setText(pref.getString("name",""))
}
}
'Android Studio' 카테고리의 다른 글
[Android 앱개발 심화] 데이터 저장 (3) - Room (3요소 생성, Migration) (# 추가하기) (0) | 2024.04.30 |
---|---|
[Android 앱개발 심화] 데이터 저장(2) - Room (개요, 3요소, gradle) (# ) (0) | 2024.04.30 |
[Android 앱개발 숙련] 알림 - 예제, 권한 (# 확인...?) (0) | 2024.04.12 |
[Android 앱개발 숙련] 알림 - 개념 (# 주석확인) (0) | 2024.04.12 |
[Android 앱개발 숙련] 프래그먼트의 데이터 전달 전체코드 + 주석 (# ) (0) | 2024.04.12 |