Cách sử dụng SharedPreferences trong Android để lưu dữ liệu

0
Dịch vụ dạy kèm gia sư lập trình
Bài này thuộc phần 15 của 16 phần trong series Tự học lập trình Android trong 24 giờ

Bên cạnh SQLite, bạn đã từng sử dụng SharedPreferences để lưu dữ liệu khi phát triển ứng dụng Android bao giờ chưa?

Cách bạn triển khai code khi sử dụng SharedPreferences trong Android như thế nào?

Mặc dù, SharePreferences rất dễ sử dụng nhưng nếu bạn không cẩn thận thì code sẽ rất rối và rườm rà. Cái gì dễ dãi quá cũng không tốt phải không?

Hôm nay, mình sẽ giới thiệu cho các bạn một cách để khởi tạo và sử dụng SharedPreferences trong ứng dụng Android bằng ngôn ngữ Kotlin.

Ưu điểm của cách này là :

  • KHÔNG lặp lại code cho việc khởi tạo ở những nơi bạn muốn truy cập preference
  • KHÔNG cần nhiều dòng code để get hoặc set một preference.

Vậy làm thế nào để thực hiện điều này? Giải pháp là sử dụng lateinit và getters & setters tùy chỉnh.

Từng bước tạo và sử dụng SharePreferences trong Android

Đầu tiên, bạn tạo một đối tượng mới gọi là AppPreferences. Trong Kotlin, thể hiện của một đối tượng sẽ được tạo trong lần đầu sử dụng và chúng ta sẽ chỉ có một đối tượng này trong ứng dụng của mình.

Về cơ bản thì cách làm này giống với singleton trong Java. Nhưng không cần lo lắng về thread-safe trong ứng dụng đa luồng.

Tất nhiên, chúng ta vẫn cần context để get được preferences. Đó là lý do tại sao chúng ta không thể khởi tạo ngay lập tức.

Vì vậy, mình tạo thêm hàm init ()với tham số là context. Mình cũng đã thêm một hàm mở rộng là edit(),  mục đích là để hạn chế viết lại code.

firstRun là một ví dụ mẫu về preference với kiểu Boolean. Bạn có thể thêm bao nhiêu tùy thích trong đối tượng. Bạn chỉ cần ghi đè lên phương thức get(), set(). Rất đơn giản phải không?

object AppPreferences {
    private const val NAME = "SpinKotlin"
    private const val MODE = Context.MODE_PRIVATE
    private lateinit var preferences: SharedPreferences

    // list of app specific preferences
    private val IS_FIRST_RUN_PREF = Pair("is_first_run", false)

    fun init(context: Context) {
        preferences = context.getSharedPreferences(NAME, MODE)
    }

    /**
     * SharedPreferences extension function, so we won't need to call edit() and apply()
     * ourselves on every SharedPreferences operation.
     */
    private inline fun SharedPreferences.edit(operation: (SharedPreferences.Editor) -> Unit) {
        val editor = edit()
        operation(editor)
        editor.apply()
    }

    var firstRun: Boolean
        // custom getter to get a preference of a desired type, with a predefined default value
        get() = preferences.getBoolean(IS_FIRST_RUN_PREF.first, IS_FIRST_RUN_PREF.second)

        // custom setter to save a preference back to preferences file
        set(value) = preferences.edit {
            it.putBoolean(IS_FIRST_RUN_PREF.first, value)
        }
}

Các preferences sẽ được khởi tạo trong phương thức onCreate()  của Application class, và chỉ được gọi một lần khi chạy ứng dụng. Vì vậy, hãy tạo một class Kotlin mới, extends từ Application và khởi tạo AppPreferences như sau:

class SpInKotlinApp : Application() {
    override fun onCreate() {
        super.onCreate()
        AppPreferences.init(this)
    }
}

Mình sẽ ví dụ cách sử dụng từ main activity:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (!AppPreferences.firstRun) {
            AppPreferences.firstRun = true
            Log.d("SpinKotlin", "The value of our pref is: ${AppPreferences.firstRun}")
        }
    }
}

Tất cả chỉ có thế thôi!

Bạn có thể tải mã nguồn bên dưới về để làm nguồn tài liệu tham khảo hoặc sử dụng trong ứng dụng của riêng mình sau này.

Chúng ta đã gần như đã nắm được các kiến thức cơ bản của khóa học lập trình Android rồi đấy. Bài viết sau cũng là bài viết cuối cùng trong khóa học này, mình sẽ hướng dẫn các bạn chi tiết từng bước đưa ứng dụng hoàn chỉnh lên Google Play Store. Các bạn đón đọc nhé

Cảm ơn bạn đã đọc bài. Nếu có bất kì câu hỏi hay đề xuất gì liên quan đến SharedPreferences trong Android, hãy để lại bình luận bên dưới nhé.

Xem tiếp các bài trong Series
Phần trước: SQLite trong Android – Làm sao để sử dụng hiệu quả nhấtPhần kế tiếp: Hướng dẫn submit ứng dụng lên Google Store mới nhất
Dịch vụ phát triển ứng dụng mobile giá rẻ - chất lượng
Bài trướcFlutter vs React Native: Framework nào tốt cho mobile?
Bài tiếp theo7 sai lầm lớn khiến việc học Javascript như “nước đổ lá khoai”
Sơn Dương
Tên đầy đủ là Dương Anh Sơn. Tốt nghiệp ĐH Bách Khoa Hà Nội. Mình bắt đầu nghiệp coder khi mà ra trường chẳng xin được việc đúng chuyên ngành. Mình tin rằng chỉ có chia sẻ kiến thức mới là cách học tập nhanh nhất. Các bạn góp ý bài viết của mình bằng cách comment bên dưới nhé !

Bình luận. Cùng nhau thảo luận nhé!

avatar
  Theo dõi bình luận  
Thông báo