Cách sử dụng SharedPreferences trong Android cực tinh tế

0
63
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ờ

Chắc hẳn các bạn đã từng sử dụng SharedPreferences khi viết ứng dụng Android rồi đúng không? 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 tinh ý thì code sẽ rất rối và rườm rà.

Hôm nay, mình sẽ giới thiệu cho các bạn một cách để 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 choviệ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? Đó chính là sử dụng lateinit và getters & setters tùy chỉnh.

Cách sử dụng SharePreference trong Android

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ể download source code 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

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 comment 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 chi tiết submit ứng dụng lên Google Store

Bình luận. Đặt câu hỏi cũng là một cách học

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