Lưu trữ dữ liệu với SharedPreferences
Khóa học lập trình Android cơ bản

Danh sách bài học
Lưu trữ dữ liệu với SharedPreferences
Dẫn nhập
Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về XỬ LÝ NỘI DUNG ĐA PHƯƠNG TIỆN TRONG ANDROID và viết một chương trình phát nhạc đơn giản.
Ở bài học này, chúng ta sẽ tìm hiểu về một trong những phương thức lưu trữ dữ liệu của Android là dạng Key-Value, giá trị được lưu vào vùng nhớ riêng của ứng dụng dưới dạng file XML.
Nội dung
Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:
Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:
- SharedPreferences là gì?
- Làm sao để tạo object dạng Singleton.
Các kiểu lưu trữ dữ liệu trong Android
Hệ điều hành Android có hỗ trợ kha khá các phương thức lưu trữ dữ liệu. Việc bạn chọn phương thức nào tuỳ thuộc vào nhu cầu và tính chất của nhu cầu đó, cũng như dung lượng cần lưu trữ là bao nhiêu.
Các phương thức nói trên bao gồm:
- Shared Preferences: Lưu trữ dữ liệu dạng Key-Value.
- Internal Storage: Lưu trữ dữ liệu vào vùng nhớ của thiết bị.
- External Storage: Lưu trữ dữ liệu vào vùng nhớ ngoài được chia sẻ.
- SQLite Database: Lưu trữ dữ liệu vào cơ sở dữ liệu được tích hợp trong Android. Cơ sở dữ liệu này là SQLite.
- Network: Lưu trữ dữ liệu trên server riêng của bạn, truy cập và lấy về qua API của server.
SharedPreferences là một Framework, nói đúng hơn là một tính năng giúp bạn lưu giữ liệu dưới dạng khoá-giá trị.
- Mỗi SharedPreferences đều đi kèm với một Context.
- Gọi hàm edit() để tạo ra một object của SharedPreferences.Editor()
- Thêm dữ liệu bằng các phương thức như putString / putBoolean,…
- Thực thi chỉnh sửa bằng phương thức commit().
Có lẽ đến đây thì các bạn cũng đã hình dung ra được phần nào, nhưng thực sự thì những thứ trên để làm gì? Chúng ta cùng làm một ví dụ nhỏ:
Ứng dụng lưu giữ tên đăng nhập
Bước 1: Tạo một project mới với tên SharedPreferencesExample
- Và chọn loại là Empty Activity như thường lệ.
Bước 2: Chúng ta sẽ tạo những thành phần sau ở trang activity_main.xml
- Một EditText có chức năng nhập dữ liệu vào.
- Một button Save dùng để lưu dữ liệu đã nhập vào SharedPreferences.
- Một button Clear để xoá hết dữ liệu trong SharedPreferences.
Code sẽ có dạng như sau:
- activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:orientation="vertical"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.howkteam.sharedpreferencesexample.MainActivity">
<EditText
android:id="@+id/et_data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_save"
android:text="SAVE"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_clear"
android:text="CLEAR"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
Trong file MainActivity.java, chúng ta sẽ khai báo các thành phần cần thiết cho nó:
SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
EditText etData;
Button btnSave;
Button btnClear;
Và khai báo hàm khởi tạo các thành phần của SharedPreferences cho dễ dùng:
private void initPreferences() {
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
editor = sharedPreferences.edit();
}
Bước 3: Vì code có nhiều thành phần nên chúng ta sẽ khai báo cho nó implements interface View.OnClickListener:
public class MainActivity extends AppCompatActivity implements View.OnClickListener
Bước 4: Trong hàm onCreate, chúng ta sẽ sửa lại như sau:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPreferences();
etData = (EditText) findViewById(R.id.et_data);
btnSave = (Button) findViewById(R.id.btn_save);
btnClear = (Button) findViewById(R.id.btn_clear);
String savedData = sharedPreferences.getString("DATA", "");
etData.setText(savedData);
btnSave.setOnClickListener(this);
btnClear.setOnClickListener(this);
}
Và hàm onClick, hàm này thì bắt buộc phải có do ta vừa implements từ OnClickListener:
@Override
public void onClick(View view) {
if (view == btnSave) {
// Nếu click vào nút Save, ta sẽ lưu dữ liệu lại.
String data = etData.getText().toString();
// "DATA" là key, data tham số thứ 2 là value.
editor.putString("DATA", data);
editor.commit();
} else if (view == btnClear) {
// Nếu click vào nút Clear, ta sẽ xoá dữ liệu đi.
etData.setText("");
editor.clear();
editor.commit();
}
}
Bước 5: Chạy thử thôi, tuy nhiên các bạn chú ý các bước như hình nhé:
- Chạy thử, nhập chữ, sau đó click nút SAVE:
- Sau đó thoát app bằng cách clear ứng dụng khỏi bộ nhớ. Cái này tuỳ máy sẽ có cách khác nhau, nhưng với máy của mình (Samsung Galaxy S5) thì nó dạng dạng như này:
- Lần sau mở app lên, các bạn sẽ thấy chữ vẫn còn đó:
Và nếu các bạn muốn xoá dữ liệu đi thì chỉ việc nhấn nút CLEAR, lần sau mở app, chữ sẽ biến mất.
Kết luận
Qua bài này chúng ta đã nắm được cách sử dụng SharedPreferences và ứng dụng của nó vào một ví dụ nho nhỏ.
Bài sau chúng ta sẽ tìm hiểu về LƯU TRỮ DỮ LIỆU VỚI SQLITE.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Lưu trữ dữ liệu với SharedPreferences dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Nội dung bài viết
Tác giả/Dịch giả
Khóa học
Khóa học lập trình Android cơ bản
Serial tutorial hướng dẫn lập trình Android cơ bản