ประหยัดอินเทอร์เน็ตมือถือด้วย 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);