Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách dùng apply() trong SharedPreferences Android

Giới thiệu SharedPreferences

SharedPreferences lưu trữ cặp key-value đơn giản (XML). 5 phương thức chính:

  • edit(): tạo Editor để sửa đổi.
  • commit(): ghi đồng bộ (blocking) ra file.
  • apply(): ghi bất đồng bộ (non-blocking), an toàn cho UI thread.
  • remove(key): xóa key.
  • putX(key, value): lưu giá trị (String, int, boolean...).

Bước 1: Tạo project mới

Android Studio → File → New Project.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText android:id="@+id/name" android:layout_width="match_parent"
        android:layout_height="60dp" android:layout_marginTop="8dp"
        android:hint="TÊN" app:layout_constraintTop_toTopOf="parent" />

    <EditText android:id="@+id/address" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:layout_marginTop="84dp"
        android:hint="Số điện thoại" app:layout_constraintTop_toTopOf="@id/name" />

    <Button android:id="@+id/button" android:layout_width="108dp"
        android:layout_height="wrap_content" android:text="Lưu"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@id/address" />

    <Button android:id="@+id/read" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="Đọc"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button" />

    <TextView android:id="@+id/result" android:layout_width="wrap_content"
        android:layout_height="0dp" android:text="kết quả"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/button" />
</android.support.constraint.ConstraintLayout>

Bước 3: MainActivity.java

package com.example.andy.myapplication;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final SharedPreferences prefs = getSharedPreferences("USER", MODE_PRIVATE);
        final EditText name = findViewById(R.id.name);
        final EditText address = findViewById(R.id.address);
        final TextView result = findViewById(R.id.result);
        Button save = findViewById(R.id.button);
        Button read = findViewById(R.id.read);

        read.setOnClickListener(v -> {
            String n = prefs.getString("Name", "Chưa có tên");
            String a = prefs.getString("Address", "Chưa có địa chỉ");
            result.setText("Tên: " + n + "\nĐịa chỉ: " + a);
        });

        save.setOnClickListener(v -> {
            String n = name.getText().toString().trim();
            String a = address.getText().toString().trim();
            if (n.isEmpty() || a.isEmpty()) {
                Toast.makeText(this, "Nhập đầy đủ thông tin", Toast.LENGTH_LONG).show();
                return;
            }
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("Name", n);
            editor.putString("Address", a);
            editor.apply(); // Ghi bất đồng bộ, không block UI
            Toast.makeText(this, "Đã lưu", Toast.LENGTH_SHORT).show();
        });
    }
}

commit() vs apply()

commit()apply()
Đồng bộCó (block thread)Không (async)
Trả vềboolean (thành công?)void
Khuyên dùngCần biết kết quả ngayUI thread, hiệu năng tốt hơn

Chạy ứng dụng

Nhập tên/SĐT, nhấn "Lưu", sau đó nhấn "Đọc" để xem dữ liệu từ SharedPreferences.

Cách dùng apply() trong SharedPreferences Android

Cách dùng apply() trong SharedPreferences Android