ประหยัดอินเทอร์เน็ตมือถือด้วย SharedPreferences

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