Để nhận đối tượng sharedpreferences.editor phải gọi phương thức nào năm 2024

Thông thường bạn sẽ sử dụng SQLite hoặc Realm để lưu trữ dữ liệu trong các ứng dụng Android, SharedPreferences cũng có thể thực hiện lưu trữ dữ liệu tùy vào mục đích sử dụng của bạn.

  • SharedPreferences lưu trữ và truy xuất dữ liệu dưới dạng key – value.
  • SharedPreferences hỗ trợ kiểu dữ liệu bao gồm string, int, boolean, float, long.
  • Dữ liệu được lưu trữ trong SharedPreferences sẽ bị mất đi trong trường hợp như khi bạn gỡ cài đặt ứng dụng, xóa dữ liệu ứng dụng thông qua cài đặt…

2. Trường hợp nên sử dụng SharedPreferences?

SharedPreferences có phải là giải pháp thay thế hoàn hảo cho SQLite hay Realm không?

  • SharedPreferences có thể thực hiện lưu trữ và truy xuất dữ liệu trong ứng dụng Android tuy nhiên nó có khá nhiều hạn chế so với SQLite hoặc Realm. Vậy SharedPreferences nên được sử dụng trong trường hợp ứng dụng của bạn lưu trữ các dữ liệu nhỏ hoặc những dữ liệu không quá phức tạp.
  • SharedPreferences chỉ hỗ trợ lưu trữ dưới dạng key – value nên nếu áp dụng để truy vấn dữ liệu liên kết giữa các bảng sẽ gây ra khó khăn hơn.
  • SharedPreferences thường được các lập trình viên sử dụng lưu trữ các thông tin dạng cấu hình ứng dụng, cài đặt… thay vì SQLite, Realm bởi SharedPreferences đơn giản và nhanh hơn nhiều.

3. Sử dụng SharedPreferences trong Android?

Sử dụng phương thức getSharedPreferences(String name, intmode) giúp bạn có thể gọi SharedPreferences từ bất kỳ Context nào trong ứng dụng của bạn.

SharedPreferences sharedPref = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE);

Thuộc tính “name” là tên tập tin SharedPreferences còn thuộc tính “mode” là chế độ lưu trữ SharedPreferences.

Một số chế độ lưu trữ (MODE) được sử dụng trong SharedPreference:

Thuộc tính Mô tả MODE_PRIVATE Đây là chế độ lưu trữ riêng tư không cho phép các ứng dụng khác có thể truy cập vào tập tin SharedPreference trong ứng dụng. MODE_WORLD_READABLE Đây là chế độ lưu trữ cho phép các ứng dụng khác chỉ có thể đọc dữ liệu từ tập tin SharedPreference trong ứng dụng của bạn nhưng không được phép ghi dữ liệu. MODE_WORLD_WRITEABLE Đây là chế độ lưu trữ cho phép các ứng dụng khác có thể ghi dữ liệu vào trong tập tin SharedPreference trong ứng dụng của bạn.

4. Ghi dữ liệu vào SharedPreferences

Để ghi dữ liệu vào một tập tin SharedPreferences trong Android bạn hãy tạo đối tượng SharedPreferences.Editor bằng cách gọi phương thức edit().

SharedPreferences sharedPref = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("url", "teamvietdev.com"); editor.putString("name", "Team Việt Dev"); editor.putBoolean("active", true); editor.commit();

Bảng sau liệt kê một số thuộc tính cơ bản được sử dụng trong SharedPreferences:

Thuộc tính Mô tả apply() Cập nhật dữ liệu mà không cần trả về kết quả thực thi lệnh thành công hay thất bại. commit() Cập nhật dữ liệu và trả về kết quả là true nếu thực thi lệnh thành công và trả về false nếu thất bại. clear() Xóa toàn bộ dữ liệu trong Shared Preference. remove(String key) Xóa dữ liệu trong Shared Preference dựa vào “key” tương ứng. putString(String key, String value) Lưu trữ dữ liệu kiểu String theo “key – value” putLong(String key, long value) Lưu trữ dữ liệu kiểu long theo “key – value” putInt(String key, int value) Lưu trữ dữ liệu kiểu int theo “key – value” putFloat(String key, float value) Lưu trữ dữ liệu kiểu float theo “key – value” putBoolean(String key, float value) Lưu trữ dữ liệu kiểu boolean theo “key – value”

Phương thức commit() lưu trữ dữ liệu đồng bộ (synchronously) còn với apply() là không đồng bộ (asynchronously). Sử dụng phương thức apply() sẽ thực thi lệnh nhanh hơn so với commit().

5. Đọc dữ liệu từ SharedPreferences:

Đọc dữ liệu từ SharedPreferences thì gọi phương thức như sau:

get<TypeData>("key_name", "value_default");

Bạn có thể gán dữ liệu mặc định trong “value_default” nếu dữ liệu trả về trong “key_name” không lấy được hoặc rỗng.

SharedPreferences sharedPref = context.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE); String url = sharedPref.getString("url", ""); String name = sharedPref.getString("name", ""); boolean active = sharedPref.getBoolean("active", false);

Lời kết: Như vậy có nhiều cách để thực hiện lưu trữ và truy xuất dữ liệu như sử dụng SQLite, Realm hoặc có thể là sử dụng SharedPreferences trong Android tùy theo mục đích sử dụng mà bạn chọn thư viện phù hợp. Hẹn gặp lại các bạn trong các bài viết tiếp theo trong chuyên mục lập trình Android với nhiều bài viết hướng dẫn, tài liệu, lập trình Android.

Giới thiệu và hướng dẫn lưu trữ dữ liệu cơ bản trong Android bằng Shared Preferences.

Giới thiệu

Trong Android có nhiều cácH lưu trữ dữ liệu với nhiều mục đích khác nhau:

  • Sử dụng SQLite để lưu trữ các dữ liệu dưới dạng bảng, truy xuất theo phong cách database.
  • Lưu trữ tập tin ở Internal Storage, External Storage.
  • Lưu trữ dữ liệu trên server và thông qua webservice để thao tác với dữ liệu đó.

Bài viết này hướng dẫn 1 cách lưu trữ đơn giản trong Android là sử dụng SharedPreferences.

Shared Preferences là gì?

Shared Preferences là 1 cách lưu trữ những dữ liệu dạng nguyên thủy (bool, int,

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

0,

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

1,

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

  1. trong Android dưới dạng file XML với những cặp key/value, ví dụ lưu trữ điểm số của game.

Để làm việc với Shared Preferences, Android SDK có cung cấp 2 class là SharedPreferences và

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

4.

Lưu trữ và lấy dữ liệu với Shared Preferences

Tạo SharedPreferences và SharePreferences.Editor

SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit();

  • Dòng 1: đối số editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string editer.apply(); // () 5 là editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string editer.apply(); // ()

    2, chỉ cần nhập tên file không cần nhập phần mở rộng file .xml.

    • Được lưu tại editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string editer.apply(); // (*) 7.
  • Dòng 2: để lưu trữ dữ liệu cần tạo 1 đối tượng editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string editer.apply(); // () 8 từ editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string editer.apply(); // () 9.

Lưu dữ liệu vào SharedPreferences

Sau đó sử dụng các phương thức có tiền tố

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

0 để lưu trữ cặp key/value.

Sau khi đặt các giá trị thì gọi phương thức

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

1 hoặc

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

2 để tiến hành ghi các giá trị xuống ứng dụng dưới dạng file .xml.

Nếu đã đặt dữ liệu mà không gọi phương thức

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

3 hoặc

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

4 thì những thay đổi này vẫn không được ghi xuống file .xml, vì vậy nếu có thay đổi thì phải gọi phương thức

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

3 hoặc

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

4 để lưu trữ những thay đổi đó.

Ví dụ:

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

Nhận dữ liệu từ SharedPreferences

Để nhận dữ liệu từ

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

7 , không cần tạo đối tượng

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

8 mà có thể sử dụng chính đối tượng

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

9 với các phương thức là

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

0:

Với X là

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

1, int,

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

0,

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

4,

editor.putBoolean("key_name1", true);          // Saving boolean editor.putInt("key_name2", "int value");       // Saving int editor.putFloat("key_name3", "float value");   // Saving float editor.putLong("key_name4", "long value");     // Saving long editor.putString("key_name5", "string value"); // Saving string

editer.apply(); // (*)

2, phương thức mô tả đúng giá trị ứng với key trong

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

6. Nếu không có key sẽ trả về giá trị

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

7.

Ví dụ:

boolean userFirstLogin = sharedPreferences.getBoolean("key_name1", true); // getting boolean int pageNumber = sharedPreferences.getInt("key_name2", 0);             // getting int float amount = sharedPreferences.getFloat("key_name3", 0.0f);           // getting Float long distance = sharedPreferences.getLong("key_name4", 0);           // getting Long String email = sharedPreferences.getString("key_name5", null);         // getting String

Xoá dữ liệu (key/value) từ SharedPreferences

Sử dụng phương thức

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

8:

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

Xoá tất cả dữ liệu từ SharedPreferences

Sử dụng phương thức

editor.remove("key_name3"); // delete data by key key_name3 editor.remove("key_name4"); // delete data by key key_name4

editer.apply(); // Apply changes

9 của đối tượng editor.

editor.clear(); editor.apply(); // Apply changes

Thực hành SharedPreferences

Tạo màn hình cài đặt và lưu trữ các cài đặt của game.

Tạo project có tên là SharedPreferences, giao diện sau khi tạo xong project:

File main_activity.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="//schemas.android.com/apk/res/android"     xmlns:tools="//schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context="com.example.nguyennghia.sharedpreference.MainActivity">

    <LinearLayout         android:id="@+id/ll_settings"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:layout_margin="16dp"         android:orientation="vertical">

        <LinearLayout             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:orientation="horizontal"             android:weightSum="9">

            <CheckBox                 android:id="@+id/cb_volume"                 android:layout_width="0dp"                 android:layout_height="wrap_content"                 android:layout_gravity="center"                 android:layout_weight="3"                 android:button="@null"                 android:checked="true"                 android:drawableRight="?android:attr/listChoiceIndicatorMultiple"                 android:text="Volume" />

            <SeekBar                 android:id="@+id/sb_volume"                 android:layout_width="0dp"                 android:layout_height="wrap_content"                 android:layout_weight="6"                 android:max="100" />         </LinearLayout>

        <LinearLayout             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:orientation="horizontal"             android:weightSum="9">

            <CheckBox                 android:id="@+id/cb_sound_effect"                 android:layout_width="0dp"                 android:layout_height="wrap_content"                 android:layout_gravity="center"                 android:layout_weight="3"                 android:button="@null"                 android:drawableRight="?android:attr/listChoiceIndicatorMultiple"                 android:text="Sound Effect" />

            <SeekBar                 android:id="@+id/sb_sound_effect"                 android:layout_width="0dp"                 android:layout_height="wrap_content"                 android:layout_weight="6"                 android:max="100" />         </LinearLayout>     </LinearLayout>

    <Button         android:id="@+id/btn_save"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_below="@+id/ll_settings"         android:layout_centerHorizontal="true"         android:layout_marginTop="16dp"       android:text="Save" /> </RelativeLayout>

Tiếp theo là xử lý logic để lưu trữ các giá trị settings game sử dụng SharedPreferences.

package com.example.nguyennghia.sharedpreference; import android.content.Context; import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CheckedTextView; import android.widget.CompoundButton; import android.widget.SeekBar;

public class MainActivity extends AppCompatActivity {     private static final String TAG = "MainActivity";     private static final String SHARED_PREFERENCE_NAME = "SettingGame";     private CheckBox cbVolume;     private CheckBox cbSoundEffect;     private SeekBar sbVolume;     private SeekBar sbSoundEffect;   private Button btnSave;

    @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main);         cbVolume = (CheckBox) findViewById(R.id.cb_volume);         cbSoundEffect = (CheckBox) findViewById(R.id.cb_sound_effect);         sbVolume = (SeekBar) findViewById(R.id.sb_volume);         sbSoundEffect = (SeekBar) findViewById(R.id.sb_sound_effect);       btnSave = (Button) findViewById(R.id.btn_save);

        cbVolume.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {             @Override             public void onCheckedChanged(CompoundButton compoundButton, boolean b) {               if (b)                   sbVolume.setVisibility(View.VISIBLE);               else                   sbVolume.setVisibility(View.INVISIBLE);             }       });

        cbSoundEffect.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {             @Override             public void onCheckedChanged(CompoundButton compoundButton, boolean b) {               if (b)                     sbSoundEffect.setVisibility(View.VISIBLE);               else                   sbSoundEffect.setVisibility(View.INVISIBLE);             }         });

      // Get value from sharedPreferences         SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);         boolean isVolume = sharedPreferences.getBoolean("volume", false);         boolean isSoundEffect = sharedPreferences.getBoolean("sound_effect", false);         int volumeValue = sharedPreferences.getInt("volume_value", 0);       int soundEffectValue = sharedPreferences.getInt("sound_effect_value", 0);         cbVolume.setChecked(isVolume);       cbSoundEffect.setChecked(isSoundEffect);

        if (isVolume)             sbVolume.setProgress(volumeValue);         else             sbVolume.setVisibility(View.INVISIBLE);

        if (isSoundEffect)             sbSoundEffect.setProgress(soundEffectValue);         else             sbSoundEffect.setVisibility(View.INVISIBLE);

        btnSave.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View view) {                 SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);                 SharedPreferences.Editor editor = sharedPreferences.edit();                 editor.putBoolean("volume", cbVolume.isChecked());                 editor.putBoolean("sound_effect", cbSoundEffect.isChecked());

              if (cbVolume.isChecked())                     editor.putInt("volume_value", sbVolume.getProgress());               else                   editor.putInt("volume_value", 0);

              if (cbSoundEffect.isChecked())                     editor.putInt("sound_effect_value", sbSoundEffect.getProgress());               else                     editor.putInt("sound_effect_value", 0);

              // Save changes                 editor.apply();             }         });     } }

Khi thay đổi giá trị checkbox và seekbar, sau đó lưu lại và thoát ứng dụng. Vào lại ứng dụng thì thấy rằng phần cài đặt này giống như đã lưu ở trước đó.

Để chắc chắn hơn, mở Android Device Moniter để xem file .xml được lưu ở chỗ nào. Vào

editor.clear(); editor.apply(); // Apply changes

1 →

editor.clear(); editor.apply(); // Apply changes

2 →

editor.clear(); editor.apply(); // Apply changes

3.

Trong mục File Explorer, tìm đến thư mục data/data.

Và tìm đến package

editor.clear(); editor.apply(); // Apply changes

4 sẽ thấy 1 thư mục có tên là shared_prefs chứa file XML đã lưu sử dụng SharedPreferences trong Android.

Chủ đề