[안드로이드]Sharedpreference실전
✅Sharedpreference기본
~메인 레이아웃에 버튼 하나 만들고 시작~
package com.example.kotlin_study.Android
import android.content.SharedPreferences
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.kotlin_study.R
import kotlinx.android.synthetic.main.activity_shared_preference.*
class SharedPreference : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shared_preference)
//SharedPreference를 불러와보자
val sharedPreference = getSharedPreferences("sp1", MODE_PRIVATE)
//Mode
//MODE_PRIVATE:생성한 어플리케이션에서만 사용가능
//(원래 모드 많은데 API17이후부터 보안상의 이후로 PRIVATE만 제공)
//지금 내가 만든 sharedPreference에 데이터를 넣기 위해 editor 얻어오기
val editor: SharedPreferences.Editor = sharedPreference.edit()
editor.putString("hello", "안녕하세요") //key-value값으로 저장
editor.apply() //apply까지 해야 데이터 완전히 들어감
//sp1->SharedPreferences
// (Key,Value)로 ("hello", "안녕하세요") 가짐
//sp2->SharedPreferences
// (Key,Value)로 ("hello", "안녕하세요") 가짐
//sp1, sp2는 독립적인 저장공간이기때문에 서로 영향 주지 않음!!
//앱이 실행될때 위에서 sharedPreference의 sp1에 안녕하세요 저장시켰으니까 버튼 클릭시 데이터 꺼내와보자
button.setOnClickListener {
val sharedPreference = getSharedPreferences("sp1", MODE_PRIVATE)
val value = sharedPreference.getString("hello", "데이터 없음")
//key가 hello로 저장된 value값을 꺼내고 없으면 "데이터 없음"이 디폴트 값으로 출력
Log.d("key-value", "value:" + value)
}
}
}
- 최초 commit해서 sp1에 데이터 저장후,
sharedPreference.getString("hello2", "데이터 없음")
로 한다면 hello11의 value값에는 데이터가 없으니 '데이터 없음'이 로그에 찍힐 것
✅데이터 저장,로드,삭제,부분삭제
~메인 레이아웃에 버튼 4개 달기~
<?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"
tools:context=".Android.SharedPreference"
android:orientation="vertical">
<Button
android:id="@+id/save_btn"
android:text="저장"
android:layout_width="100dp"
android:layout_height="100dp"/>
<Button
android:id="@+id/load_btn"
android:text="불러오기"
android:layout_width="100dp"
android:layout_height="100dp"/>
<Button
android:id="@+id/delete_btn"
android:text="부분지우기"
android:layout_width="100dp"
android:layout_height="100dp"/>
<Button
android:id="@+id/delete_all_btn"
android:text="전체지우기"
android:layout_width="100dp"
android:layout_height="100dp"/>
</LinearLayout>
~메인 엑티비티~
package com.example.kotlin_study.Android
import android.content.SharedPreferences
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.example.kotlin_study.R
import kotlinx.android.synthetic.main.activity_shared_preference.*
class SharedPreference : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_shared_preference)
//저장 버튼 클릭시 sharedPreference의 sp1에 데이터 저장
save_btn.setOnClickListener {
val sharedPreference = getSharedPreferences("sp1", MODE_PRIVATE)
val editor: SharedPreferences.Editor = sharedPreference.edit()
editor.putString("hello", "안녕하세요") //key-value값으로 저장
editor.putString("goodbye", "안녕히가세요") //key-value값으로 저장
editor.apply() //apply까지 해야 데이터 완전히 들어감
}
//불러오기 버튼 클릭시 sp1에 저장된 데이터 값들 로그에 찍힘
load_btn.setOnClickListener {
val sharedPreference = getSharedPreferences("sp1", MODE_PRIVATE)
val value1 = sharedPreference.getString("hello", "데이터 없음1")
val value2 = sharedPreference.getString("goodbye", "데이터 없음2")
Log.d("key-value", "value1:" + value1)
Log.d("key-value", "value2:" + value2)
}
//부분지우기 버튼 클릭시 sp1에 저장된 데이터 중 key가 hello인 데이터 삭제
delete_btn.setOnClickListener {
val sharedPreference = getSharedPreferences("sp1", MODE_PRIVATE)
val editor: SharedPreferences.Editor = sharedPreference.edit()
editor.remove("hello")
editor.apply()
}
//전체지우기 버튼 클릭시 sp1에 저장된 데이터 모두 삭제
delete_all_btn.setOnClickListener {
val sharedPreference = getSharedPreferences("sp1", MODE_PRIVATE)
val editor: SharedPreferences.Editor = sharedPreference.edit()
editor.clear()
editor.apply()
}
}
}
- 저장누르면 sp1에 key가 hello,goodbye에 각각 값 저장됨->불러오기 누르면 로그 찍힘->부분지우기 누르면 key hello인 value 삭제->다시 불러오기 눌러서 로그 확인->전체지우기 누르면 key들에 있는 value 전부 삭제->불러오기 눌러서 로그 확인
- apply()말고 commit()도 파일에 변경사항을 반영하는 메서드지만 commit()은 메인 스레드를 사용하기 때문에 짧은 순간이지만 화면이 멈출 수 있어서 특별한 경우가 아니면 apply()를 사용할 것.
Author And Source
이 문제에 관하여([안드로이드]Sharedpreference실전), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dabin/안드로이드Sharedpreference실전저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)