Preferences DataStore
จัดเก็บการตั้งค่าแบบคีย์-ค่าอย่างเป็นรีแอกทีฟ
Preferences DataStore เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
Preferences DataStore
Preferences DataStore จัดเก็บคู่คีย์-ค่าอย่างง่าย เช่นเดียวกับ SharedPreferences แต่ใช้ส่วนเชื่อมต่อแบบอะซิงโครนัสสมัยใหม่ โดยไม่ได้บังคับสคีมาหรือความปลอดภัยด้านชนิดข้อมูลกับอ็อบเจ็กต์ทั้งหมด
คุณเข้าถึงค่าต่าง ๆ ผ่านคีย์ที่ระบุชนิดข้อมูล
การสร้าง DataStore
คุณสร้างอินสแตนซ์ DataStore เพียงหนึ่งรายการต่อไฟล์ โดยใช้ดีลีเกตพร็อพเพอร์ตี preferencesDataStore ที่ระดับบนสุดของไฟล์ Kotlin ค่า name จะกลายเป็นชื่อไฟล์บนดิสก์
import androidx.datastore.preferences.preferencesDataStore
import androidx.datastore.preferences.core.Preferences
val Context.dataStore: DataStore<Preferences> by
preferencesDataStore(name = "settings")เหตุผลที่ใช้ดีลีเกตระดับบนสุด
ดีลีเกตช่วยรับรองว่าในกระบวนการของคุณจะมีอินสแตนซ์ DataStore สำหรับชื่อไฟล์นั้นเพียงหนึ่งรายการ การสร้างอีกสองรายการสำหรับไฟล์เดียวกันจะทำให้เกิดข้อผิดพลาด เพราะทั้งสองรายการจะแย่งกันจัดการข้อมูลเดียวกัน
การประกาศเป็นส่วนขยายของ Context ที่ระดับบนสุดช่วยให้เป็นซิงเกิลตัน
คีย์การตั้งค่า
ค่าแต่ละค่าต้องมีคีย์ที่ระบุชนิดข้อมูล คีย์จะทำหน้าที่ทั้งตั้งชื่อรายการและกำหนดชนิดข้อมูลให้แน่นอน ฟังก์ชันตัวช่วยจะสร้างคีย์สำหรับชนิดข้อมูลที่รองรับแต่ละชนิด
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.intPreferencesKey
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val LAUNCH_COUNT = intPreferencesKey("launch_count")ชนิดคีย์ที่รองรับ
Preferences DataStore รองรับชนิดคีย์พื้นฐานต่อไปนี้:
stringPreferencesKeybooleanPreferencesKeyintPreferencesKey,longPreferencesKey,floatPreferencesKey,doublePreferencesKeystringSetPreferencesKey
กำหนดคีย์ไว้ในที่เดียว
รูปแบบที่นิยมคือรวบรวมคีย์ทั้งหมดไว้ใน object เพื่อให้ค้นหาและนำกลับมาใช้ได้ง่าย และช่วยหลีกเลี่ยงการพิมพ์ชื่อสตริงผิด
object PrefKeys {
val USERNAME = stringPreferencesKey("username")
val DARK_MODE = booleanPreferencesKey("dark_mode")
val FONT_SIZE = intPreferencesKey("font_size")
}คีย์สตริงกับชื่อตัวแปร
โปรดจำไว้ว่าอาร์กิวเมนต์สตริง เช่น "dark_mode" คือสิ่งที่จะถูกเขียนลงดิสก์ หากคุณเปลี่ยนชื่อในภายหลัง ค่าที่มีอยู่เดิมจะไม่สามารถเข้าถึงได้ ส่วนชื่อ val ใน Kotlin มีไว้ใช้ในโค้ดของคุณเท่านั้น
ใช้ DataStore แยกตามหน้าที่
คุณสามารถสร้าง DataStore หลายรายการสำหรับหน้าที่ที่แตกต่างกัน โดยแต่ละรายการมีชื่อไฟล์ของตัวเอง เช่น ที่เก็บ "settings" และที่เก็บ "user_session" ควรรวบรวมคีย์ที่เกี่ยวข้องไว้ด้วยกัน
val Context.settingsStore by preferencesDataStore(name = "settings")
val Context.sessionStore by preferencesDataStore(name = "session")การเข้าถึงจากชั้นส่วนติดต่อผู้ใช้
แม้ดีลีเกตจะผูกอยู่กับ Context แต่ไม่ควรอ่านโดยตรงจาก Composable ให้แทรก DataStore เข้าไปในรีโพซิทอรี แล้วเปิดเผยโฟลว์ให้ ViewModel วิธีนี้ช่วยให้ทดสอบส่วนติดต่อผู้ใช้ได้
โครงสร้างรีโพซิทอรีอย่างง่าย
การห่อหุ้ม DataStore ไว้ในคลาสรีโพซิทอรีจะทำให้คุณมีส่วนเชื่อมต่อที่สะอาด และมีจุดเดียวสำหรับกำหนดคีย์กับตรรกะการแมปข้อมูล
class SettingsRepository(private val dataStore: DataStore<Preferences>) {
val darkMode: Flow<Boolean> = dataStore.data
.map { it[PrefKeys.DARK_MODE] ?: false }
}ค่าเริ่มต้น
คีย์อาจยังไม่มีอยู่ ดังนั้นการอ่านจึงคืนค่าเป็น null ควรระบุค่าเริ่มต้นด้วยตัวดำเนินการ Elvis ?: เสมอเมื่อแมปค่าการตั้งค่า
val fontSize: Flow<Int> = dataStore.data
.map { prefs -> prefs[PrefKeys.FONT_SIZE] ?: 14 }ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับคีย์การตั้งค่า
สรุปทบทวน
คุณได้ตั้งค่า Preferences DataStore แล้ว:
- สร้างอินสแตนซ์หนึ่งรายการผ่านดีลีเกตระดับบนสุด
preferencesDataStore - กำหนดคีย์ที่ระบุชนิดข้อมูลด้วย
stringPreferencesKey,booleanPreferencesKeyและอื่น ๆ - รวบรวมคีย์ไว้ใน
objectและห่อหุ้มการเข้าถึงไว้ในรีโพซิทอรี - ระบุค่าเริ่มต้นสำหรับคีย์ที่ไม่มีอยู่เสมอ
ถัดไป: อ่านและเขียนการตั้งค่าเหล่านั้นจริง ๆ
คำถามที่พบบ่อย
บทเรียน “Preferences DataStore” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Preferences DataStore” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Preferences DataStore”
จัดเก็บการตั้งค่าแบบคีย์-ค่าอย่างเป็นรีแอกทีฟ คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “Preferences DataStore” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- DataStore เทียบกับ SharedPreferences
- Preferences DataStore
- การอ่านและเขียนการตั้งค่า
- Proto DataStore