एंड्रॉइड में 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>
चलाएं और टेस्ट करें
- ऐप खोलें — खाली फॉर्म दिखेगा।
- यूज़रनेम/पासवर्ड डालें → "मुझे याद रखें" चेक करें → "लॉगिन" दबाएं।
- ऐप बंद करें और दोबारा खोलें — फील्ड्स ऑटो-भरे होंगे।
- चेकबॉक्स अनचेक करके लॉगिन करें — डेटा क्लियर हो जाएगा।
🔑 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 माइग्रेट करने पर विचार करें।