Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Nếu có một tập hợp khoá-giá trị tương đối nhỏ cần lưu, bạn nên sử dụng các API SharedPreferences. Đối tượng SharedPreferences trỏ đến một tệp chứa các cặp khoá-giá trị và cung cấp các phương thức đơn giản để đọc và ghi các cặp khoá đó. Mỗi tệp SharedPreferences do khung này quản lý và có thể ở chế độ riêng tư hoặc dùng chung.
Trang này cho bạn biết cách sử dụng các API SharedPreferences để lưu trữ và truy xuất các giá trị đơn giản.
Tìm hiểu và học cách xử lý lựa chọn ưu tiên dùng chung
Bạn có thể tạo tệp lựa chọn ưu tiên dùng chung mới hoặc truy cập vào một tệp hiện có bằng cách gọi một trong các phương thức sau:
getSharedPreferences(): Sử dụng phương thức này nếu bạn cần nhiều tệp lựa chọn ưu tiên dùng chung được xác định theo tên mà bạn chỉ định bằng tham số đầu tiên. Bạn có thể gọi phương thức này từ Context bất kỳ trong ứng dụng của mình.
getPreferences(): Sử dụng phương thức này từ Activity nếu bạn chỉ cần sử dụng một tệp lựa chọn ưu tiên dùng chung cho hoạt động. Vì phương thức này truy xuất tệp lựa chọn ưu tiên chung mặc định thuộc về hoạt động, nên bạn không cần cung cấp tên.
Ví dụ: Mã sau đây truy cập vào tệp lựa chọn ưu tiên dùng chung mà chuỗi tài nguyên R.string.preference_file_key xác định và mở bằng chế độ riêng tư để chỉ ứng dụng của bạn mới có thể truy cập vào tệp:
Khi đặt tên cho tệp lựa chọn ưu tiên dùng chung, bạn nên sử dụng tên có thể xác định danh tính chính xác đối với ứng dụng của mình. Thêm tiền tố là ID ứng dụng vào tên tệp sẽ giúp bạn dễ dàng thực hiện việc này. Ví dụ: "com.example.myapp.PREFERENCE_FILE_KEY"
Ngoài ra, nếu chỉ cần một tệp lựa chọn ưu tiên dùng chung cho hoạt động của mình, bạn có thể sử dụng phương thức getPreferences():
Để ghi vào tệp lựa chọn ưu tiên dùng chung, hãy tạo SharedPreferences.Editor bằng cách gọi edit() trên SharedPreferences của bạn.
Truyền các khoá và giá trị mà bạn muốn ghi bằng các phương thức như: putInt() và putString(). Sau đó, hãy gọi apply() hoặc commit() để lưu các thay đổi. Ví dụ:
apply() thay đổi ngay đối tượng SharedPreferences trong bộ nhớ nhưng ghi nội dung cập nhật vào ổ đĩa một cách không đồng bộ. Ngoài ra, bạn có thể sử dụng commit() để ghi dữ liệu vào ổ đĩa một cách đồng bộ. Tuy nhiên, commit() có tính đồng bộ nên bạn cần tránh gọi từ luồng chính, vì tính năng này có thể tạm dừng việc hiển thị giao diện người dùng.
Đọc từ lựa chọn ưu tiên dùng chung
Để truy xuất các giá trị từ một tệp lựa chọn ưu tiên dùng chung, hãy gọi các phương thức như getInt() và getString(), cung cấp khoá cho giá trị bạn muốn và có thể chọn làm giá trị mặc định để trả về nếu không có khoá. Ví dụ:
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Save simple data with SharedPreferences\n\nIf you have a relatively small collection of key-values that you'd like to save,\nyou can use the [`SharedPreferences`](/reference/android/content/SharedPreferences) APIs. A `SharedPreferences` object\npoints to a file containing key-value pairs and provides simple methods to read\nand write them. Each `SharedPreferences` file is managed by the framework and\ncan be private or shared.\n\nThis page shows you how to use the `SharedPreferences` APIs to store and\nretrieve simple values.\n| **Caution:** `DataStore` is a modern data storage solution that you should use instead of `SharedPreferences`. It builds on Kotlin coroutines and Flow, and overcomes many of the drawbacks of `SharedPreferences`.\n|\n| Read the [DataStore guide](/topic/libraries/architecture/datastore) for more information.\n| **Note:** The `SharedPreferences` APIs are for reading and writing key-value pairs, and you shouldn't confuse them with the [`Preference`](/reference/android/preference/Preference) APIs, which help you build a user interface for your app settings (although they also use `SharedPreferences` to save the user's settings). For information about the [`Preference`](/reference/android/preference/Preference) APIs, see the [Settings developer guide](/guide/topics/ui/settings).\n\nGet a handle to shared preferences\n----------------------------------\n\nYou can create a new shared preference file or access an existing one by calling\none of these methods:\n\n- **[`getSharedPreferences()`](/reference/android/content/Context#getSharedPreferences(java.lang.String,%20int)):** Use this if you need multiple shared preference files identified by name, which you specify with the first parameter. You can call this from any [`Context`](/training/data-storage/shared-preferences#kotlin:%7E:text=this%20from%20any-,Context,-in%20your%20app) in your app.\n- **[`getPreferences()`](/reference/android/app/Activity#getPreferences(int)):** Use this from an [`Activity`](/reference/android/app/Activity) if you need to use only one shared preference file for the activity. Because this retrieves a default shared preference file that belongs to the activity, you don't need to supply a name.\n\nFor example, the following code accesses the shared preferences file that's\nidentified by the resource string `R.string.preference_file_key` and opens it\nusing the private mode so the file is accessible by only your app: \n\n### Kotlin\n\n```kotlin\nval sharedPref = activity?.getSharedPreferences(\n getString(R.string.preference_file_key), Context.MODE_PRIVATE)\n```\n\n### Java\n\n```java\nContext context = getActivity();\nSharedPreferences sharedPref = context.getSharedPreferences(\n getString(R.string.preference_file_key), Context.MODE_PRIVATE);\n```\n\nWhen naming your shared preference files, you should use a name that's uniquely\nidentifiable to your app. A good way to do this is prefix the file name with\nyour [application ID](/studio/build/configure-app-module#set_the_application_id). For example:\n`\"com.example.myapp.PREFERENCE_FILE_KEY\"`\n\nAlternatively, if you need just one shared preference file for your activity,\nyou can use the [`getPreferences()`](/reference/android/app/Activity#getPreferences(int)) method: \n\n### Kotlin\n\n```kotlin\nval sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)\n```\n\n### Java\n\n```java\nSharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);\n```\n| **Caution:** The [`MODE_WORLD_READABLE`](/reference/android/content/Context#MODE_WORLD_READABLE) and [`MODE_WORLD_WRITEABLE`](/reference/android/content/Context#MODE_WORLD_WRITEABLE) modes have been deprecated since API level 17.\n|\n| Starting with Android 7.0 (API level 24), Android throws a\n| [`SecurityException`](/reference/java/lang/SecurityException) if you use them. If your app needs to share private\n| files with other apps, it may use a [`FileProvider`](/reference/androidx/core/content/FileProvider) with the\n| [`FLAG_GRANT_READ_URI_PERMISSION`](/reference/android/content/Intent#FLAG_GRANT_READ_URI_PERMISSION). For more information, also see\n| [Sharing Files](/training/secure-file-sharing).\n\nIf you're using the `SharedPreferences` API to save app settings, you\nshould instead use [`getDefaultSharedPreferences()`](/reference/android/preference/PreferenceManager#getDefaultSharedPreferences(android.content.Context)) to get the default\nshared preference file for your entire app. For more information, see the\n[Settings developer guide](/guide/topics/ui/settings).\n\nWrite to shared preferences\n---------------------------\n\nTo write to a shared preferences file, create a [`SharedPreferences.Editor`](/reference/android/content/SharedPreferences.Editor)\nby calling [`edit()`](/reference/android/content/SharedPreferences#edit()) on your `SharedPreferences`.\n\nPass the keys and values you want to write with methods such as:\n[`putInt()`](/reference/android/content/SharedPreferences.Editor#putInt()) and[`putString()`](/reference/android/content/SharedPreferences.Editor#putString()). Then call [`apply()`](/reference/android/content/SharedPreferences.Editor#apply()) or\n[`commit()`](/reference/android/content/SharedPreferences.Editor#commit()) to save the changes. For example: \n\n### Kotlin\n\n```kotlin\nval sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return\nwith (sharedPref.edit()) {\n putInt(getString(R.string.saved_high_score_key), newHighScore)\n apply()\n}\n```\n\n### Java\n\n```java\nSharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);\nSharedPreferences.Editor editor = sharedPref.edit();\neditor.putInt(getString(R.string.saved_high_score_key), newHighScore);\neditor.apply();\n```\n\n`apply()` changes the in-memory `SharedPreferences` object immediately but\nwrites the updates to disk asynchronously. Alternatively, you can use `commit()`\nto write the data to disk synchronously. But because `commit()` is synchronous,\nyou should avoid calling it from your main thread because it could pause your UI\nrendering.\n\nRead from shared preferences\n----------------------------\n\nTo retrieve values from a shared preferences file, call methods such as\n[`getInt()`](/reference/android/content/SharedPreferences#getInt(java.lang.String,%20int)) and [`getString()`](/reference/android/content/SharedPreferences#getString(java.lang.String,%20java.lang.String)), providing the key for the value you\nwant, and optionally a default value to return if the key isn't present. For\nexample: \n\n### Kotlin\n\n```kotlin\nval sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return\nval defaultValue = resources.getInteger(R.integer.saved_high_score_default_key)\nval highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)\n```\n\n### Java\n\n```java\nSharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);\nint defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key);\nint highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);\n```"]]