Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में SharedPreferences का उपयोग कैसे करें?

एंड्रॉइड में SharedPreferences — की-वैल्यू डेटा स्टोर करने का आसान तरीका

SharedPreferences एंड्रॉइड में छोटे प्राइमिटिव डेटा (बूलियन, इंट, फ्लोट, लॉन्ग, स्ट्रिंग, स्ट्रिंग सेट) को XML फाइल में प्राइवेटली स्टोर करने का मानक API है। यह "रिमेंबर मी" लॉगिन, यूज़र सेटिंग्स, ऑनबोर्डिंग फ्लैग आदि के लिए आदर्श है।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio → File → New → New Project → "Empty Activity" → Finish।

चरण 2: Layout (activity_main.xml) — लॉगिन फॉर्म

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="24dp"
    android:gravity="center">

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="उपयोगकर्ता नाम"
        android:inputType="text"
        android:layout_marginBottom="16dp" />

    <EditText
        android:id="@+id/etPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="पासवर्ड"
        android:inputType="textPassword"
        android:layout_marginBottom="16dp" />

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="लॉगिन"
        android:layout_marginBottom="16dp" />

    <CheckBox
        android:id="@+id/cbRemember"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="मुझे याद रखें"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/tvStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textColor="#4CAF50" />

</LinearLayout>

चरण 3: Strings.xml — Keys सेंट्रलाइज़ करें

<resources>
    <string name="app_name">SharedPrefs Demo</string>
    <string name="pref_name">LoginPrefs</string>
    <string name="key_username">username</string>
    <string name="key_password">password</string>
    <string name="key_remember">remember_me</string>
</resources>

चरण 4: MainActivity.java — पूरा लॉजिक

package com.example.sharedprefsdemo;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private EditText etName, etPassword;
    private CheckBox cbRemember;
    private Button btnLogin;
    private TextView tvStatus;

    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;

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

        // Views बाइंड करें
        etName = findViewById(R.id.etName);
        etPassword = findViewById(R.id.etPassword);
        cbRemember = findViewById(R.id.cbRemember);
        btnLogin = findViewById(R.id.btnLogin);
        tvStatus = findViewById(R.id.tvStatus);

        // SharedPreferences इंस्टेंस प्राप्त करें (प्राइवेट मोड)
        sharedPreferences = getSharedPreferences(
                getString(R.string.pref_name),
                MODE_PRIVATE
        );
        editor = sharedPreferences.edit();

        // स्टार्टअप पर सेव्ड डेटा लोड करें
        loadSavedCredentials();

        btnLogin.setOnClickListener(v -> {
            String username = etName.getText().toString().trim();
            String password = etPassword.getText().toString().trim();

            if (username.isEmpty() || password.isEmpty()) {
                Toast.makeText(this, "कृपया सभी फील्ड भरें", Toast.LENGTH_SHORT).show();
                return;
            }

            if (cbRemember.isChecked()) {
                // क्रेडेंशियल्स सेव करें
                editor.putString(getString(R.string.key_username), username);
                editor.putString(getString(R.string.key_password), password);
                editor.putBoolean(getString(R.string.key_remember), true);
                editor.apply(); // एसिंक, नॉन-ब्लॉकिंग
                tvStatus.setText("✅ क्रेडेंशियल्स सेव हो गए");
            } else {
                // "याद रखें" अनचेक्ड — पुराना डेटा क्लियर करें
                editor.remove(getString(R.string.key_username));
                editor.remove(getString(R.string.key_password));
                editor.putBoolean(getString(R.string.key_remember), false);
                editor.apply();
                tvStatus.setText("🗑️ सेव्ड क्रेडेंशियल्स हटा दिए गए");
            }
        });
    }

    private void loadSavedCredentials() {
        boolean remember = sharedPreferences.getBoolean(
                getString(R.string.key_remember), false
        );

        if (remember) {
            String savedUser = sharedPreferences.getString(
                    getString(R.string.key_username), ""
            );
            String savedPass = sharedPreferences.getString(
                    getString(R.string.key_password), ""
            );

            etName.setText(savedUser);
            etPassword.setText(savedPass);
            cbRemember.setChecked(true);
            tvStatus.setText("🔑 सेव्ड क्रेडेंशियल्स ऑटो-भरे गए");
        } else {
            cbRemember.setChecked(false);
            tvStatus.setText("ℹ️ कोई सेव्ड क्रेडेंशियल्स नहीं");
        }
    }
}

चरण 5: AndroidManifest.xml

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

    <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/Theme.SharedPrefsDemo">

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

    </application>
</manifest>

चलाएं और टेस्ट करें

  1. ऐप खोलें — खाली फॉर्म दिखेगा।
  2. यूज़रनेम/पासवर्ड डालें → "मुझे याद रखें" चेक करें → "लॉगिन" दबाएं।
  3. ऐप बंद करें और दोबारा खोलें — फील्ड्स ऑटो-भरे होंगे।
  4. चेकबॉक्स अनचेक करके लॉगिन करें — डेटा क्लियर हो जाएगा।

🔑 SharedPreferences के मुख्य मेथड्स

ऑपरेशनमेथडनोट
स्ट्रिंग सेवeditor.putString(key, value)
इंट सेवeditor.putInt(key, value)
बूलियन सेवeditor.putBoolean(key, value)
फ्लोट सेवeditor.putFloat(key, value)
लॉन्ग सेवeditor.putLong(key, value)
स्ट्रिंग सेट सेवeditor.putStringSet(key, set)API 11+
कमिट (सिंक)editor.commit()ब्लॉकिंग, बूलियन रिटर्न
अप्लाई (एसिंक)editor.apply()नॉन-ब्लॉकिंग, सिफारिश किया गया
पढ़ें (डिफ़ॉल्ट सहित)prefs.getString(key, default)अन्य टाइप्स के लिए समान
की मौजूद है?prefs.contains(key)
की हटाएंeditor.remove(key)
सब क्लियर करेंeditor.clear()

🔒 सुरक्षा नोट: EncryptedSharedPreferences

सेंसिटिव डेटा (टोकन, पासवर्ड) के लिए एन्क्रिप्टेड वर्ज़न उपयोग करें (AndroidX Security लाइब्रेरी):

// build.gradle
implementation "androidx.security:security-crypto:1.1.0-alpha06"

// उपयोग
val masterKey = MasterKey.Builder(this)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val encryptedPrefs = EncryptedSharedPreferences.create(
    this,
    "secret_prefs",
    masterKey,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)

// सामान्य SharedPreferences जैसा ही API
encryptedPrefs.edit().putString("api_token", "secret").apply()

⚡ आधुनिक विकल्प: DataStore (Jetpack)

नए प्रोजेक्ट्स के लिए Google **DataStore** (Preferences DataStore / Proto DataStore) की सिफारिश करता है — यह कोरूटीन-आधारित, टाइप-सेफ और माइग्रेशन-सपोर्टिव है।

सारांश

  • ✅ SharedPreferences छोटे की-वैल्यू डेटा के लिए सरल, तेज़, विश्वसनीय है।
  • ✅ apply() उपयोग करें (एसिंक), commit() केवल तभी जब तुरंत रिजल्ट चाहिए।
  • 🔒 सेंसिटिव डेटा के लिए EncryptedSharedPreferences उपयोग करें।
  • 🔄 नए ऐप्स के लिए DataStore माइग्रेट करने पर विचार करें।
  1. Android SQLite में total_changes() फंक्शन का उपयोग कैसे करें? Android SQLite में total_changes() फंक्शन का उपयोग कैसे करें?

    SQLite total_changes() फंक्शन उदाहरण से पहले, Android में SQLite डेटाबेस को समझें। SQLite एक ओपन-सोर्स SQL डेटाबेस है जो डिवाइस पर टेक्स्ट फ़ाइल में डेटा स्टोर करता है। total_changes() फंक्शन डेटाबेस कनेक्शन खुलने के बाद से हुए कुल पंक्ति परिवर्तनों (इन्सर्ट, अपडेट, डिलीट) की संख्या लौटाता है। चरण

  1. Android SQLite में unlikely() फंक्शन का उपयोग कैसे करें? Android SQLite में unlikely() फंक्शन का उपयोग कैसे करें?

    SQLite unlikely() फंक्शन उदाहरण से पहले, Android में SQLite डेटाबेस को समझें। SQLite एक ओपन-सोर्स SQL डेटाबेस है। unlikely(X) फंक्शन SQLite क्वेरी ऑप्टिमाइज़र को एक संकेत देता है कि एक्सप्रेशन X के झूठे होने की संभावना अधिक है। यह क्वेरी प्लानिंग में मदद करता है। यह likely() का विपरीत है। चरण 1: नय

  1. Android में ScrollView का उपयोग कैसे करें? Android में ScrollView का उपयोग कैसे करें?

    Android में ScrollView का उपयोग यह उदाहरण दर्शाता है कि लंबी सामग्री को स्क्रॉल करने योग्य बनाने के लिए ScrollView का उपयोग कैसे करें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project से प्रोजेक्ट बनाएं। चरण 2: ScrollView में कई बटन जोड़ें (activity_main.xml) <?xml version=1.0 e