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