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é.
Bình luận. Cùng nhau thảo luận nhé!