Lưu trữ dữ liệu cố định với shared preferences

Một phần của tài liệu Bài giảng phát triển ứng dụng cho thiết bị di động hồ thị thảo trang (Trang 127)

Android cung cấp sẵn một cơ chế cho đơn giản giúp chúng ta lưu trữ nhanh các dữ liệu ngắn như cấu hình ứng dụng, tên đăng nhập, email… và lấy lại dữ liệu đã ghi này trong các lần chạy ứng dụng tiếp theo.

Cách thức thuận tiện nhất là mô tả tập trung các cấu hình ta cần lưu lại trong một Activity (thường là màn hình “Settings” của ứng dụng). Android cung cấp sẵn một loại Activity đặc biệt là PreferenceActivity giúp đơn hóa quá trình này. Ví dụ dưới đây minh họa cách sử dụng Activity này.

Để sử dụng được PreferenceActivity, trước hết ta mô tả các thông tin ta cần lưu lại trong một tài liệu xml trong thư mục “res/xml”, trong ví dụ này, ta tạo file “res/xml/myapppreferences.xml” với nội dung như sau:

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen

xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Category 1">

<CheckBoxPreference

android:title="Checkbox"

android:defaultValue="false"

android:summary="True or False"

android:key="checkboxPref" />

</PreferenceCategory> <PreferenceCategory android:title="Category 2"> <EditTextPreference

android:summary="Enter a string"

android:defaultValue="[Enter a string here]"

android:title="Edit Text"

android:key="editTextPref" />

<RingtonePreference

android:summary="Select a ringtone"

android:title="Ringtones"

Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang

128 "Click here to go to the second Preference Screen"

android:key="secondPrefScreenPref" > <EditTextPreference

android:summary="Enter a string"

android:title="Edit Text (second Screen)"

android:key="secondEditTextPref"

/> </PreferenceScreen> </PreferenceCategory>

</PreferenceScreen>

Sau đó, ta cần tạo một Activity kế thừa từ PreferenceActivity với nội dung như sau:

import android.os.Bundle;

import android.preference.PreferenceActivity;

public class AppPreferenceActivity extends PreferenceActivity {

@Override (adsbygoogle = window.adsbygoogle || []).push({});

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

PreferenceManager prefMgr = getPreferenceManager(); prefMgr.setSharedPreferencesName("appPreferences"); //---load the preferences from an XML file---

addPreferencesFromResource(R.xml.myapppreferences); }

}

Nội dung của màn hình này được mô tả hoàn toàn trong file xml ở trên, trong đó chia các cấu hình này thành 2 danh mục (category 1 và category 2) và một số loại cấu hình khác nhau như checkbox, edittext, nhạc chuông và một ví dụ minh họa cho việc mở thêm màn hình cấu hình thứ 2 (khi màn hình đầu có nhiều chi tiết).

Bấm vào edittext, sẽ có popup cho bạn nhập giá trị cần lưu lại:

Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang

130 Màn hình preference thứ 2:

Sauk hi bạn thay đổi giá trị của các mục cấu hình trong Activity này, hệ thống sẽ tự động lưu lại giá trị của chúng để có thể sử dụng được trong các lần tiếp theo.

Việc lưu trữ dữ liệu này là trong suốt với người dùng, tuy nhiên với máy ảo Android ta có thể xem được cụ thể các giá trị này. Trên thực tế chúng được lưu trong 1 file xml nằm trên bộ nhớ trong, trong vùng nhớ chỉ có thể truy cập được bởi ứng dụng tạo ra nó (thư mục /data/data/{package-name}/shared_prefs/appPreferences.xml):

Nội dung file này có dạng như sau:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map>

Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang

132 </map>

Để lấy giá trị của các cấu hình này trong code, ta làm như sau:

SharedPreferences appPrefs = getSharedPreferences("appPreferences",

MODE_PRIVATE);

Toast.makeText(this, appPrefs.getString("editTextPref", ""), Toast.LENGTH_LONG).show();

Trong đó là tên của file cấu hình cần mở (được đặt ở hàm prefMgr.setSharedPreferencesName("appPreferences"); phía trên), còn editTextPref

là tên của thuộc tính cần lấy giá trị (được đặt trong file res/xml/myappprefererences.xml ở trên). Ngoài ra ta cũng có thể đặt lại giá trị của các cấu hình này bằng tay mà không cần thông qua PreferenceActivity bằng cách sử dụng SharedPreferences.Editor như sau:

SharedPreferences appPrefs =

getSharedPreferences("appPreferences", MODE_PRIVATE); SharedPreferences.Editor prefsEditor = appPrefs.edit();

prefsEditor.putString("editTextPref", ((EditText)

findViewById(R.id.txtString)).getText().toString()); prefsEditor.commit();

Sauk hi thay đổi giá trị của các thuộc tính cần thay đổi, ta cần gọi phương thức commit() của lớp Editor này để các thay đổi có hiệu lực (tiến hành ghi vào file xml trong bộ nhớ trong như mô tả ở trên)

Một phần của tài liệu Bài giảng phát triển ứng dụng cho thiết bị di động hồ thị thảo trang (Trang 127)