หากคุณต้องการบันทึกคอลเล็กชันคีย์-ค่าจำนวนไม่มาก
คุณจะใช้ 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);