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

Android SharedPreferences पूरी गाइड उदाहरण के साथ

SharedPreferences क्या है?

SharedPreferences Android में की-वैल्यू जोड़े के रूप में छोटी मात्रा में प्रिमिटिव डेटा स्टोर करने का एक सरल तंत्र है। डेटा XML फाइल में प्राइवेट मोड में स्टोर होता है और ऐप रीस्टार्ट के बाद भी बना रहता है।

समर्थित डेटा टाइप्स

  • String
  • int
  • long
  • float
  • boolean
  • Set<String> (API 11+)

मुख्य मेथड्स

मेथडविवरण
edit()Editor इंस्टेंस प्राप्त करें
putString(key, value)स्ट्रिंग सेव करें
putInt(key, value)इंटीजर सेव करें
putBoolean(key, value)बूलियन सेव करें
getString(key, defValue)स्ट्रिंग पढ़ें (डिफ़ॉल्ट के साथ)
getInt(key, defValue)इंटीजर पढ़ें
contains(key)की मौजूदगी चेक करें
remove(key)की हटाएं
clear()सभी डेटा हटाएं
apply()एसिंक्रोनस सेव (पसंदीदा)
commit()सिंक्रोनस सेव, बूलियन रिटर्न

बुनियादी उपयोग

SharedPreferences प्राप्त करना

// प्राइवेट प्रेफरेंस (केवल इस ऐप के लिए)
SharedPreferences prefs = getSharedPreferences("my_prefs", MODE_PRIVATE);

// डिफ़ॉल्ट प्रेफरेंस (एक्टिविटी/कॉन्टेक्स्ट स्कोप)
SharedPreferences defaultPrefs = PreferenceManager.getDefaultSharedPreferences(context);

डेटा लिखना

SharedPreferences.Editor editor = prefs.edit();
editor.putString("username", "john_doe");
editor.putInt("age", 25);
editor.putBoolean("is_logged_in", true);
editor.putFloat("rating", 4.5f);
editor.putLong("last_login", System.currentTimeMillis());

// सेट सेव करना (API 11+)
Set tags = new HashSet<>(Arrays.asList("android", "kotlin", "java"));
editor.putStringSet("tags", tags);

// एसिंक्रोनस कमिट (अनुशंसित)
editor.apply();

// या सिंक्रोनस (जब तुरंत परिणाम चाहिए)
boolean success = editor.commit();

डेटा पढ़ना

String username = prefs.getString("username", "guest"); // डिफ़ॉल्ट "guest"
int age = prefs.getInt("age", 0);
boolean isLoggedIn = prefs.getBoolean("is_logged_in", false);
float rating = prefs.getFloat("rating", 0f);
long lastLogin = prefs.getLong("last_login", 0);

// सेट पढ़ना
Set tags = prefs.getStringSet("tags", new HashSet<>());

// अस्तित्व जांच
if (prefs.contains("username")) {
    // की मौजूद है
}

पूर्ण उदाहरण: लॉगिन फॉर्म

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">

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

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

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

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

    <Button
        android:id="@+id/btnLogout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="लॉगआउट" />

    <TextView
        android:id="@+id/tvStatus"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:gravity="center"
        android:textSize="16sp" />

</LinearLayout>

MainActivity.java

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 static final String PREFS_NAME = "login_prefs";
    private static final String KEY_USERNAME = "username";
    private static final String KEY_PASSWORD = "password"; // वास्तविक ऐप में पासवर्ड सेव न करें!
    private static final String KEY_REMEMBER = "remember_me";

    private SharedPreferences prefs;
    private EditText etUsername, etPassword;
    private CheckBox cbRemember;
    private TextView tvStatus;

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

        prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        etUsername = findViewById(R.id.etUsername);
        etPassword = findViewById(R.id.etPassword);
        cbRemember = findViewById(R.id.cbRemember);
        tvStatus = findViewById(R.id.tvStatus);

        // सेव्ड क्रेडेंशियल्स लोड करें
        loadSavedCredentials();

        Button btnLogin = findViewById(R.id.btnLogin);
        btnLogin.setOnClickListener(v -> attemptLogin());

        Button btnLogout = findViewById(R.id.btnLogout);
        btnLogout.setOnClickListener(v -> logout());
    }

    private void loadSavedCredentials() {
        if (prefs.getBoolean(KEY_REMEMBER, false)) {
            String username = prefs.getString(KEY_USERNAME, "");
            String password = prefs.getString(KEY_PASSWORD, "");
            etUsername.setText(username);
            etPassword.setText(password);
            cbRemember.setChecked(true);
            tvStatus.setText("स्वागत है, " + username + "!");
        }
    }

    private void attemptLogin() {
        String username = etUsername.getText().toString().trim();
        String password = etPassword.getText().toString().trim();

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

        // यहां वास्तविक प्रमाणीकरण होगा (API कॉल, आदि)
        // डेमो के लिए: कोई भी नॉन-खाली क्रेडेंशियल वैध है
        boolean success = true;

        if (success) {
            if (cbRemember.isChecked()) {
                saveCredentials(username, password);
            } else {
                clearCredentials();
            }
            tvStatus.setText("लॉगिन सफल: " + username);
            Toast.makeText(this, "लॉगिन सफल", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "अमान्य क्रेडेंशियल्स", Toast.LENGTH_SHORT).show();
        }
    }

    private void saveCredentials(String username, String password) {
        prefs.edit()
             .putString(KEY_USERNAME, username)
             .putString(KEY_PASSWORD, password)
             .putBoolean(KEY_REMEMBER, true)
             .apply();
    }

    private void clearCredentials() {
        prefs.edit()
             .remove(KEY_USERNAME)
             .remove(KEY_PASSWORD)
             .putBoolean(KEY_REMEMBER, false)
             .apply();
        etUsername.setText("");
        etPassword.setText("");
        cbRemember.setChecked(false);
        tvStatus.setText("लॉगआउट हो गया");
    }

    private void logout() {
        clearCredentials();
        tvStatus.setText("आप लॉगआउट हो गए");
        Toast.makeText(this, "लॉगआउट सफल", Toast.LENGTH_SHORT).show();
    }
}

सर्वोत्तम अभ्यास और सुरक्षा

  • संवेदनशील डेटा न सेव करें: पासवर्ड, टोकन, क्रेडिट कार्ड नंबर कभी SharedPreferences में न रखें। इसके लिए EncryptedSharedPreferences (Jetpack Security) या Keystore उपयोग करें
  • MODE_PRIVATE उपयोग करें (डिफ़ॉल्ट) - अन्य ऐप्स एक्सेस न कर सकें
  • apply() प्राथमिकता दें - UI थ्रेड ब्लॉक नहीं करता
  • डिफ़ॉल्ट मान हमेशा प्रदान करें - NullPointerException से बचने के लिए
  • कुंजी नामकरण: स्थिरांक (KEY_*) उपयोग करें टाइपो से बचने के लिए

EncryptedSharedPreferences (API 23+)

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

// उपयोग
MasterKeys.AliasSpec spec = MasterKeys.AES256_GCM_SPEC;
String masterKeyAlias = MasterKeys.getOrCreate(spec);

SharedPreferences encryptedPrefs = EncryptedSharedPreferences.create(
    "secret_prefs",
    masterKeyAlias,
    context,
    EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
    EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);

// अब सामान्य SharedPreferences की तरह उपयोग करें
encryptedPrefs.edit().putString("api_token", "secret_token").apply();
  1. Android में SearchView से RecyclerView कैसे फ़िल्टर करें? Android में SearchView से RecyclerView कैसे फ़िल्टर करें?

    Android में SearchView से RecyclerView फ़िल्टर करना यह ट्यूटोरियल दिखाता है कि कैसे RecyclerView में SearchView का उपयोग करके रियल-टाइम फ़िल्टरिंग इम्प्लीमेंट की जाती है, Filterable इंटरफेस और कस्टम एडाप्टर के साथ। चरण 1: प्रोजेक्ट और निर्भरताएं Android Studio में नया प्रोजेक्ट बनाएं। RecyclerView

  1. एंड्रॉइड में दूसरे ऐप के SharedPreferences कैसे एक्सेस करें एंड्रॉइड में दूसरे ऐप के SharedPreferences कैसे एक्सेस करें

    शेयर्ड यूजर ID के माध्यम से अन्य ऐप्लिकेशन के SharedPreferences पढ़ना डिफ़ॉल्ट रूप से एंड्रॉइड ऐप्स सैंडबॉक्स्ड होते हैं और एक-दूसरे के SharedPreferences एक्सेस नहीं कर सकते। हालांकि, यदि दोनों ऐप्स एक ही sharedUserId और समान सर्टिफिकेट से साइन हों, तो वे डेटा साझा कर सकते हैं। नोट: एंड्रॉइड 10+ (AP

  1. Phoenix OS के साथ PC पर Android कैसे चलाएं Phoenix OS के साथ PC पर Android कैसे चलाएं

    Phoenix OS Android पर आधारित एक PC ऑपरेटिंग सिस्टम है, जो Windows और Mac कंप्यूटर दोनों के साथ संगत है। वर्तमान संस्करण Android 7.1 का समर्थन करता है और लैपटॉप, डेस्कटॉप PC और टैबलेट पर चलने के लिए डिज़ाइन किया गया है। लिखने योग्य होने के कारण, इसे आसानी से फ्लैश ड्राइव पर ले जाया जा सकता है और दूस