หากมีชุดคีย์-ค่าที่ต้องการบันทึกค่อนข้างน้อย คุณสามารถใช้ 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);