0Pricing
Android Academy · บทเรียน

SharedPreferences

จัดเก็บข้อมูลแบบคีย์-ค่าอย่างง่ายให้คงอยู่ระหว่างเซสชันของแอปด้วย SharedPreferences เรียนรู้การบันทึก อ่าน และลบค่ากำหนด

SharedPreferences เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน

ตัวเลือกพื้นที่จัดเก็บข้อมูลถาวร

Android มีหลายวิธีสำหรับจัดเก็บข้อมูลไว้ในเครื่อง:

  • SharedPreferences — คู่คีย์กับค่าแบบง่าย (การตั้งค่า โทเค็น)
  • Room — ฐานข้อมูล SQLite แบบมีโครงสร้าง (ข้อมูลซับซ้อน)
  • DataStore — สิ่งทดแทน SharedPreferences แบบอะซิงโครนัสสมัยใหม่
  • ไฟล์ — การรับส่งข้อมูลกับไฟล์โดยตรง

SharedPreferences เหมาะอย่างยิ่งสำหรับการตั้งค่าและค่ากำหนดของผู้ใช้แบบง่าย

SharedPreferences คืออะไร

SharedPreferences จัดเก็บข้อมูลเป็น คู่คีย์กับค่า ในไฟล์ XML บนอุปกรณ์ รองรับ:

  • String
  • Int / Long / Float
  • Boolean
  • Set<String>

ข้อมูลยังคงอยู่เมื่อเปิดแอปใหม่ และยังคงอยู่หลังการเปลี่ยนแปลงการกำหนดค่า (การหมุนหน้าจอ)

การรับอินสแตนซ์ SharedPreferences

มีสองวิธีในการรับออบเจ็กต์ SharedPreferences:

// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
    "MyAppPrefs",    // file name
    Context.MODE_PRIVATE  // only your app can read it
)

// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)

การเขียนข้อมูล

ใช้ ตัวแก้ไข เพื่อเขียนค่า จากนั้นเรียก apply():

val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)

prefs.edit()
    .putString("username", "alice")
    .putInt("login_count", 5)
    .putBoolean("dark_mode", true)
    .apply()  // async, non-blocking — preferred over commit()

// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
    putString("username", "alice")
    apply()
}

การอ่านข้อมูล

อ่านค่าด้วยคีย์ พร้อมระบุค่าเริ่มต้นหากไม่มีคีย์นั้น:

val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)

val username = prefs.getString("username", "Guest")  // default: "Guest"
val count = prefs.getInt("login_count", 0)            // default: 0
val darkMode = prefs.getBoolean("dark_mode", false)   // default: false

println("Hello, $username! Logins: $count. Dark: $darkMode")

ตัวอย่างการใช้งานจริง: สลับธีม

บันทึกและกู้คืนการตั้งค่าโหมดมืด:

class SettingsActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySettingsBinding
    private lateinit var prefs: SharedPreferences

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySettingsBinding.inflate(layoutInflater)
        setContentView(binding.root)

        prefs = getSharedPreferences("settings", MODE_PRIVATE)

        // Restore saved state
        binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)

        binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
            prefs.edit().putBoolean("dark_mode", isChecked).apply()
        }
    }
}

การบันทึกโทเค็นเข้าสู่ระบบ

จัดเก็บและตรวจสอบโทเค็นการยืนยันตัวตนเมื่อเปิดแอปใหม่:

// Save token after login
fun saveToken(token: String) {
    getSharedPreferences("auth", MODE_PRIVATE)
        .edit()
        .putString("token", token)
        .apply()
}

// Check if user is logged in
fun isLoggedIn(): Boolean {
    val token = getSharedPreferences("auth", MODE_PRIVATE)
        .getString("token", null)
    return token != null
}

// Clear on logout
fun logout() {
    getSharedPreferences("auth", MODE_PRIVATE)
        .edit()
        .remove("token")
        .apply()
}

การนำออกและล้างข้อมูล

นำคีย์บางรายการออกหรือล้างข้อมูลทั้งหมด:

  • .remove("key") — ลบรายการหนึ่งรายการ
  • .clear() — ลบทุกอย่างในไฟล์

เรียก .apply() เสมอ (หรือ .commit() หากต้องการยืนยันแบบทำงานพร้อมกัน)

SharedPreferences เทียบกับ DataStore

SharedPreferences ใช้งานได้ดี แต่มีข้อจำกัด:

  • การอ่านแบบทำงานพร้อมกันอาจบล็อกเธรดหลัก
  • ไม่มีความปลอดภัยด้านชนิดข้อมูล

Jetpack DataStore เป็นสิ่งทดแทนสมัยใหม่ — ทำงานแบบอะซิงโครนัสอย่างสมบูรณ์ด้วย Kotlin Flow และมีความปลอดภัยด้านชนิดข้อมูล สำหรับโปรเจกต์ใหม่ ควรเลือกใช้ DataStore ส่วน SharedPreferences ยังคงถูกใช้อย่างแพร่หลายและเหมาะสมสำหรับข้อมูลปริมาณเล็กน้อย

ตรวจสอบความเข้าใจ

เมธอดใดใช้บันทึกข้อมูลลง SharedPreferences แบบอะซิงโครนัสโดยไม่บล็อกเธรด UI

สรุป: SharedPreferences

ขณะนี้คุณสามารถเก็บข้อมูลแบบง่ายให้คงอยู่ระหว่างการเปิดแอปแต่ละครั้งได้:

  • รับข้อมูลด้วย getSharedPreferences(name, MODE_PRIVATE)
  • เขียน: .edit().putString(key, value).apply()
  • อ่าน: .getString(key, defaultValue)
  • นำออก: .edit().remove(key).apply()
  • ใช้ apply() (อะซิงโครนัส) แทน commit() (ทำงานพร้อมกัน)

หลักสูตรถัดไป: สถาปัตยกรรมแอป — ViewModel, Room และ Coroutines

คำถามที่พบบ่อย

บทเรียน “SharedPreferences” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “SharedPreferences” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “SharedPreferences”

จัดเก็บข้อมูลแบบคีย์-ค่าอย่างง่ายให้คงอยู่ระหว่างเซสชันของแอปด้วย SharedPreferences เรียนรู้การบันทึก อ่าน และลบค่ากำหนด คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 6 บทเรียน

บทเรียน “SharedPreferences” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. คอลเลกชัน Kotlin
  2. พื้นฐาน RecyclerView
  3. เหตุการณ์คลิกใน RecyclerView
  4. SharedPreferences
  5. ค่ากำหนดของ DataStore
  6. อะแดปเตอร์และ DiffUtil
← กลับไปที่ Android Academy