[アンドロイド]Sharedpreference実戦


89 Sharedpreferenceのデフォルト値


~メインレイアウトにボタンを1つ作ってスタート~
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)

        }
    }
}
  • が初めてコミットsp 1にデータを格納した後、sharedPreference.getString("hello2", "데이터 없음")の場合、hello 11の値にはデータがないため、「データなし」はログ
  • に書き込まれる.

    データの保存、ロード、削除、および一部の削除


    ~メインレイアウトに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()
            }
        }
    }
  • キーを押す保存キーsp 1にhello、goodbyeにそれぞれ格納されている値->読み込み時削除ログを押す->一部削除キーを押すhelloin値->読み込み確認ログを押す->すべて消去時削除キーの値を押す->読み込み確認ログを押す
  • apply()に加え、commit()もファイル内の変更を反映する方法ですが、commit()はプライマリスレッドを使用し、時間は短いですが画面が停止する可能性があるため、特別な場合ではないのでapply()を使用します.