หากคุณต้องการบันทึกคอลเล็กชันคีย์-ค่าจำนวนไม่มาก
คุณจะใช้ SharedPreferences
API ได้ ออบเจ็กต์ SharedPreferences
ชี้ไปที่ไฟล์ที่มีคู่คีย์-ค่าและให้วิธีการที่ง่ายในการอ่าน
แล้วเขียน ไฟล์ SharedPreferences
แต่ละไฟล์ได้รับการจัดการโดยเฟรมเวิร์กและ
จะเป็นแบบส่วนตัวหรือแบบใช้ร่วมกันก็ได้
หน้านี้แสดงวิธีใช้ API ของ SharedPreferences
เพื่อจัดเก็บและ
ดึงค่าพื้นฐาน
รับแฮนเดิลสำหรับค่ากำหนดที่แชร์
คุณสามารถสร้างไฟล์ค่ากำหนดที่ใช้ร่วมกันใหม่ หรือเข้าถึงไฟล์ที่มีอยู่ด้วยการเรียก วิธีใดวิธีหนึ่งต่อไปนี้
getSharedPreferences()
: ใช้ตัวเลือกนี้ในกรณีที่ต้องการการแชร์ข้อมูลหลายรายการ ไฟล์ค่ากำหนดที่ระบุตามชื่อ ซึ่งคุณจะระบุด้วยแท็กแรก พารามิเตอร์ โดยจะเรียกใช้จากContext
ใดก็ได้ในแอปgetPreferences()
: ใช้ตัวเลือกนี้จากActivity
หากต้องการ เพื่อใช้ไฟล์ค่ากำหนดที่แชร์เพียงไฟล์เดียวสำหรับกิจกรรม เพราะว่า จะเรียกไฟล์ค่ากำหนดที่แชร์ตามค่าเริ่มต้นซึ่งเป็นของกิจกรรม คุณ ไม่จำเป็นต้องระบุชื่อ
ตัวอย่างเช่น โค้ดต่อไปนี้เข้าถึงไฟล์ค่ากำหนดที่แชร์
ที่ระบุโดยสตริงทรัพยากร R.string.preference_file_key
และเปิด
โดยใช้โหมดส่วนตัวเพื่อให้มีเพียงแอปของคุณเท่านั้นที่เข้าถึงไฟล์ได้
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
เมื่อตั้งชื่อไฟล์ค่ากำหนดที่แชร์ คุณควรใช้ชื่อที่ไม่ซ้ำกัน
ระบุตัวตนของแอปของคุณได้ วิธีที่ดีในการทำเช่นนี้คือ ใส่คำนำหน้าชื่อไฟล์ด้วย
รหัสแอปพลิเคชันของคุณ ดังตัวอย่างต่อไปนี้
"com.example.myapp.PREFERENCE_FILE_KEY"
หรือหากคุณต้องการไฟล์ค่ากำหนดที่แชร์เพียงไฟล์เดียวสำหรับกิจกรรม
คุณจะใช้เมธอด getPreferences()
ได้ดังนี้
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
หากใช้ SharedPreferences
API เพื่อบันทึกการตั้งค่าแอป คุณจะทำสิ่งต่อไปนี้ได้
ควรใช้ getDefaultSharedPreferences()
แทนเพื่อรับค่าเร��่มต้น
ไฟล์ค่ากำหนดที่แชร์สำหรับทั้งแอปของคุณได้ สำหรับข้อมูลเพิ่มเติม โปรดดู
คู่มือนักพัฒนาซอฟต์แวร์เกี่ยวกับการตั้งค่า
เขียนไปยังค่ากำหนดที่แชร์
หากต้องการเขียนไปยังไฟล์ค่ากำหนดที่แชร์ ให้สร้าง SharedPreferences.Editor
โดยโทรไปที่ edit()
ผ่าน SharedPreferences
ส่งต่อคีย์และค่าที่ต้องการเขียนด้วยวิธีการต่างๆ เช่น
putInt()
และputString()
จากนั้นโทรหา apply()
หรือ
commit()
เพื่อบันทึกการเปลี่ยนแปลง เช่น
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
เปลี่ยนออบเจ็กต์ SharedPreferences
ในหน่วยความจำทันทีแต่
จะเขียนการอัปเดตไปยังดิสก์แบบไม่พร้อมกัน อีกวิธีหนึ่งคือ คุณสามารถใช้ commit()
เพื่อเขียนข้อมูลลงในดิสก์แบบซิงโครนัส แต่เนื่องจาก commit()
ทำงานพร้อมกัน
คุณไม่ควรเรียกใช้จากเทรดหลักเพราะอาจหยุด UI ชั่วคราว
ในการแสดงภาพ
อ่านจากค่ากำหนดที่แชร์
หากต้องการดึงค่าจากไฟล์ค่ากำหนดที่แชร์ ให้ใช้วิธีเรียกใช้งาน เช่น
getInt()
และ getString()
โดยให้คีย์สำหรับค่าที่คุณ
คุณต้องการ และค่าเริ่มต้นที่จะแสดงผลหากไม่มีคีย์ สำหรับ
ตัวอย่าง:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);