[안드로이드]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()를 사용할 것.

좋은 웹페이지 즐겨찾기