ตอนที่ 8 Android Studio Kotlin บันทึกข้อมูลโดยใช้ SharedPreferences

ในการรับทำแอพ Android Studio จำเป็นอย่างยิ่งที่จะต้องมีวิธีจัดเก็บและจัดการข้อมูลส่วนเล็กๆ เช่น การตั้งค่าผู้ใช้ การตั้งค่าแอพ หรือคะแนนของเกม Android Studio Kotlin มอบโซลูชันที่มีประสิทธิภาพและตรงไปตรงมาสำหรับความต้องการนี้ผ่าน SharedPreferences บทความนี้จะสำรวจ SharedPreferences และสาธิตวิธีใช้เพื่อคงข้อมูลในการทำแอพ Android Studio ของคุณที่สร้างด้วย Kotlin

1. ทำความเข้าใจ SharedPreferences

SharedPreferences คือ Android API ที่ให้คุณจัดเก็บและดึงคู่คีย์-ค่าของประเภทข้อมูลดั้งเดิม เช่น บูลีน, โฟลต, ints, ยาว และสตริง โซลูชันการจัดเก็บข้อมูลที่มีน้ำหนักเบานี้เหมาะอย่างยิ่งสำหรับการคงไว้ซึ่งข้อมูลง่ายๆ ที่ไม่ต้องการความซับซ้อนของฐานข้อมูลหรือโอเวอร์เฮดของที่จัดเก็บแบบไฟล์

SharedPreferences ถูกจัดเก็บไว้ในไฟล์ XML ซึ่งเป็นแบบส่วนตัวสำหรับการทำแอพคุณตามค่าเริ่มต้น ข้อมูลจะคงอยู่ตลอดเซสชันของผู้ใช้ หมายความว่าค่าที่คุณบันทึกจะสามารถใช้ได้แม้ว่าแอปจะปิดหรือรีสตาร์ทอุปกรณ์ก็ตาม

2. การเข้าถึง SharedPreferences

หากต้องการเข้าถึง SharedPreferences ในการทำแอพ Android Studio คุณสามารถใช้เมธอด getSharedPreferences() หรือเมธอดแบบย่อที่สะดวกกว่า getDefaultSharedPreferences() ข้อแตกต่างหลักระหว่างสองสิ่งนี้คือ getDefaultSharedPreferences() จะใช้ไฟล์ดีฟอลต์และหลักการตั้งชื่อโดยอัตโนมัติ ในขณะที่ getSharedPreferences() จะให้คุณระบุชื่อที่กำหนดเองสำหรับไฟล์การกำหนดค่าตามความชอบ

ตัวอย่าง:

// Using getSharedPreferences()
val sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE)

// Using getDefaultSharedPreferences()
val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

3. การบันทึกข้อมูลไปยัง SharedPreferences

ในการบันทึกข้อมูลไปยัง SharedPreferences คุณต้องได้รับอินสแตนซ์ของ SharedPreferences.Editor ซึ่งอนุญาตให้คุณแก้ไขเนื้อหาของไฟล์การกำหนดค่าตามความชอบ จากนั้นคุณสามารถใช้เมธอด put ของเอดิเตอร์เพื่อบันทึกคู่คีย์-ค่าของคุณ และสุดท้ายเรียกเมธอด apply() หรือ commit() เพื่อยืนยันการเปลี่ยนแปลง

ตัวอย่าง:

val sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()

editor.putInt("high_score", 100)
editor.putString("player_name", "John Doe")
editor.apply()

4. ดึงข้อมูลจาก SharedPreferences

การดึงข้อมูลจาก SharedPreferences เป็นเรื่องง่าย ใช้วิธีการรับที่เหมาะสมสำหรับชนิดข้อมูล โดยระบุคีย์และค่าเริ่มต้นหากไม่มีคีย์

ตัวอย่าง:

val sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE)

val highScore = sharedPreferences.getInt("high_score", 0)
val playerName = sharedPreferences.getString("player_name", "Unknown")

5. การลบข้อมูลจาก SharedPreferences

หากต้องการลบข้อมูลออกจาก SharedPreferences คุณสามารถใช้เมธอด remove() ของ SharedPreferences.Editor ตามด้วยการเรียก apply() หรือ commit() เพื่อยืนยันการเปลี่ยนแปลง

ตัวอย่าง:

val sharedPreferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE)
val editor = sharedPreferences.edit()

editor.remove("high_score")
editor.apply()

6. การใช้คลาสตัวช่วย (Helper Class) SharedPreferences

เพื่อให้ขั้นตอนการเข้าถึงและจัดการ SharedPreferences ในการทำแอพ Android Studio ของคุณง่ายขึ้น คุณสามารถสร้างคลาสตัวช่วยที่ล้อมรอบ SharedPreferences API และแสดงวิธีการที่กำหนดเองสำหรับกรณีการใช้งานเฉพาะของคุณ

ตัวอย่าง:

class PreferencesHelper(context: Context) {
    private val sharedPreferences = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE)

    fun saveHighScore(score: Int) {
        sharedPreferences.edit().putInt("high_score", score).apply()
    }

    fun getHighScore(): Int {
        return sharedPreferences.getInt("high_score", 0)
    }

    fun savePlayerName(name: String) {
        sharedPreferences.edit().putString("player_name", name).apply()
    }

    fun getPlayerName(): String? {
        return sharedPreferences.getString("player_name", "Unknown")
    }
}

7. การใช้ SharedPreferences กับ Android Jetpack DataStore (ทางเลือก)

หากคุณกำลังมองหาทางเลือกที่มีประสิทธิภาพและเป็นมิตรกับ Kotlin มากกว่า SharedPreferences ให้ลองใช้ไลบรารี Android Jetpack DataStore DataStore เป็นโซลูชันการจัดเก็บข้อมูลสมัยใหม่ที่นำเสนอความปลอดภัยของประเภท รองรับ Kotlin coroutines และปรับปรุงการจัดการความสอดคล้องของข้อมูล

หากต้องการใช้ DataStore ให้เพิ่มการอ้างอิงต่อไปนี้ในไฟล์ build.gradle ของแอปของคุณ:

implementation "androidx.datastore:datastore-preferences:1.0.0"

ตัวอย่าง:

class DataStoreHelper(private val context: Context) {
    private val dataStore = context.createDataStore(name = "my_data_store")

    companion object {
        val HIGH_SCORE = preferencesKey<Int>("high_score")
        val PLAYER_NAME = preferencesKey<String>("player_name")
    }

    suspend fun saveHighScore(score: Int) {
        dataStore.edit { preferences ->
            preferences[HIGH_SCORE] = score
        }
    }

    fun getHighScore(): Flow<Int> {
        return dataStore.data.map { preferences ->
            preferences[HIGH_SCORE] ?: 0
        }
    }

    suspend fun savePlayerName(name: String) {
        dataStore.edit { preferences ->
            preferences[PLAYER_NAME] = name
        }
    }

    fun getPlayerName(): Flow<String> {
        return dataStore.data.map { preferences ->
            preferences[PLAYER_NAME] ?: "Unknown"
        }
    }
}

SharedPreferences เป็นโซลูชันที่มีประสิทธิภาพและตรงไปตรงมาสำหรับการคงข้อมูลจำนวนเล็กน้อยสำหรับการทำแอพ Android Studio Kotlin เมื่อเข้าใจวิธีการเข้าถึง บันทึก ดึงข้อมูล และลบข้อมูลจาก SharedPreferences คุณจะสามารถจัดการข้อมูลง่ายๆ เช่น การตั้งค่าผู้ใช้และการตั้งค่าแอปได้อย่างมีประสิทธิภาพ การใช้คลาสตัวช่วยสามารถลดความซับซ้อนของกระบวนการทำงานกับ SharedPreferences และปรับปรุงการจัดระเบียบรหัสของคุณ หากคุณกำลังมองหาทางเลือกที่ทันสมัยกว่า ให้ลองใช้ไลบรารี Android Jetpack DataStore เพื่อรับสิทธิประโยชน์เพิ่มเติม เช่น ความปลอดภัยของประเภทและการสนับสนุน Kotlin coroutines

เขียนแอพ Android Studio

ตอนที่ 7 Android Studio Kotlin fragments คืออะไร
ตอนที่ 9 Android Studio Kotlin การทำงานกับฐานข้อมูล SQLite