Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีใช้ SharedPreferences ใน Android

ภาพรวม

ตัวอย่างนี้สาธิตการใช้ SharedPreferences เพื่อบันทึกและอ่านข้อมูลเล็กๆ น้อยๆ เช่น ชื่อผู้ใช้ รหัสผ่าน และการตั้งค่า "จดจำข้อมูล"

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

เปิด Android Studio → File → New Project และกรอกข้อมูลที่จำเป็น

ขั้นตอนที่ 2: เลย์เอาต์ (res/layout/activity_main.xml)

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

    <EditText
        android:id="@+id/etName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:ems="10"
        android:layout_marginTop="75dp"
        android:hint="Enter Name" />

    <EditText
        android:id="@+id/etPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/etName"
        android:ems="10"
        android:layout_centerHorizontal="true"
        android:hint="Enter Password"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"
        android:layout_below="@id/etPassword"
        android:layout_alignStart="@id/etPassword"
        android:layout_marginTop="10dp" />

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btnLogin"
        android:layout_marginTop="10dp"
        android:text="Remember my credentials"
        android:layout_alignStart="@id/btnLogin" />

</RelativeLayout>

ขั้นตอนที่ 3: โค้ดหลัก (src/MainActivity.java)

import android.content.SharedPreferences;
import android.preference.PreferenceManager;
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.EditText;

public class MainActivity extends AppCompatActivity {
    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
    EditText name, password;
    Button button;
    CheckBox checkBox;
    String strName, strPassword, strCheckBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        name = findViewById(R.id.etName);
        password = findViewById(R.id.etPassword);
        button = findViewById(R.id.btnLogin);
        checkBox = findViewById(R.id.checkBox);

        // ใช้ Default SharedPreferences
        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        editor = sharedPreferences.edit();

        // โหลดข้อมูลที่บันทึกไว้ก่อนหน้า
        checkSharedPreference();

        button.setOnClickListener(v -> {
            if (checkBox.isChecked()) {
                // บันทึกข้อมูล
                editor.putString(getString(R.string.checkBox), "True");
                editor.putString(getString(R.string.name), name.getText().toString());
                editor.putString(getString(R.string.password), password.getText().toString());
                editor.apply(); // ใช้ apply() แทน commit() สำหรับ Async write
            } else {
                // ล้างข้อมูล
                editor.putString(getString(R.string.checkBox), "False");
                editor.putString(getString(R.string.name), "");
                editor.putString(getString(R.string.password), "");
                editor.apply();
            }
        });
    }

    private void checkSharedPreference() {
        strCheckBox = sharedPreferences.getString(getString(R.string.checkBox), "False");
        strName = sharedPreferences.getString(getString(R.string.name), "");
        strPassword = sharedPreferences.getString(getString(R.string.password), "");

        name.setText(strName);
        password.setText(strPassword);
        checkBox.setChecked(strCheckBox.equals("True"));
    }
}

ขั้นตอนที่ 4: String Resources (res/values/strings.xml)

<resources>
    <string name="app_name">Sample</string>
    <string name="checkBox">Sample.checkbox</string>
    <string name="name">Sample.name</string>
    <string name="password">Sample.password</string>
</resources>

ขั้นตอนที่ 5: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

การทดสอบ

รันแอปพลิเคชัน กรอกชื่อ/รหัสผ่าน ทิ้งถูกติ๊ก "Remember my credentials" กด Login ปิดแอปเปิดใหม่ ข้อมูลจะยังคงอยู่

วิธีใช้ SharedPreferences ใน Android

คำแนะนำเพิ่มเติม

เมธอดคำอธิบาย
apply()เขียนแบบ Asynchronous (แนะนำ)
commit()เขียนแบบ Synchronous (บล็อก UI Thread)
getString(key, def)อ่านค่า String พร้อมค่าเริ่มต้น
getInt(key, def)อ่านค่า Integer
getBoolean(key, def)อ่านค่า Boolean
remove(key)ลบค่าตาม Key
clear()ล้างทั้งหมด
💡 เคล็ดลับ: สำหรับข้อมูลสำคัญเช่น Token/Password ควรเข้ารหัส (Encrypt) ก่อนบันทึก หรือใช้ EncryptedSharedPreferences จาก Jetpack Security