AD

Android App में User Preferences कैसे सेव करें? SharedPreferences का Step-by-Step Tutorial

Android App में User Preferences कैसे सेव करें? SharedPreferences का Step-by-Step Tutorial

भूमिका: ऐप बंद होने के बाद भी डेटा कैसे याद रहता है?

क्या आपने कभी ध्यान दिया है कि जब आप किसी एंड्रॉइड ऐप (जैसे Spotify या Instagram) में 'डार्क मोड' ऑन करते हैं, या अपना प्रोफाइल नाम बदलते हैं, तो ऐप को बंद करके दोबारा खोलने पर भी वह सेटिंग वैसी ही रहती है? ऐप को कैसे याद रहता है कि आपकी पसंद क्या थी?

इसके लिए एंड्रॉइड डेवलपर्स एक बहुत ही आसान और असरदार टूल का इस्तेमाल करते हैं, जिसे SharedPreferences कहा जाता है। यह एंड्रॉइड का एक इन-बिल्ट फीचर है जो छोटे-छोटे डेटा (जैसे सेटिंग्स, लॉगिन स्टेटस, या यूजर का नाम) को फोन की मेमोरी में हमेशा के लिए सेव कर देता है।

यदि आप एंड्रॉइड डेवलपमेंट सीख रहे हैं, तो SharedPreferences को समझना आपके लिए बेहद जरूरी है। इस व्यावहारिक ट्यूटोरियल में, हम एक रियल-वर्ल्ड उदाहरण के साथ सीखेंगे कि इसका इस्तेमाल कैसे किया जाता है।

---

SharedPreferences क्या है? (सरल शब्दों में)

SharedPreferences एंड्रॉइड का एक ऐसा फ्रेमवर्क है जो डेटा को Key-Value Pair (की-वैल्यू पेयर) के रूप में स्टोर करता है। इसे आप एक छोटी सी डिजिटल डायरी की तरह समझ सकते हैं, जहां हर जानकारी का एक नाम (Key) होता है और उसके सामने उसकी वैल्यू (Value) लिखी होती है।

उदाहरण के लिए:

  • Key: "user_name" | Value: "Amit Kumar"
  • Key: "dark_mode_on" | Value: true
  • Key: "app_volume" | Value: 80

यह डेटा XML फाइल के रूप में आपके ऐप के प्राइवेट फोल्डर में सुरक्षित रहता है। जब तक यूजर ऐप का डेटा क्लियर नहीं करता या ऐप को अनइंस्टॉल नहीं करता, तब तक यह डेटा डिलीट नहीं होता।

---

हमारा रियल-वर्ल्ड प्रोजेक्ट: "Welcome Back" ऐप

इस कॉन्सेप्ट को गहराई से समझने के लिए, हम एक छोटा सा रियल-वर्ल्ड प्रोजेक्ट बनाएंगे। मान लीजिए हम एक ऐसा ऐप बना रहे हैं जो यूजर से उसका नाम पूछेगा और उसे सेव कर लेगा।

जब यूजर अगली बार ऐप खोलेगा, तो ऐप उसे दोबारा नाम इनपुट करने के लिए नहीं कहेगा, बल्कि सीधे स्क्रीन पर दिखाएगा: "Welcome Back, [User Name]!"

स्टेप 1: ऐप का लेआउट तैयार करना (XML)

सबसे पहले, हमें यूजर से नाम इनपुट लेने के लिए एक EditText, डेटा सेव करने के लिए एक Button, और स्वागत संदेश दिखाने के लिए एक TextView की जरूरत होगी।

हमारे activity_main.xml का स्ट्रक्चर कुछ इस तरह दिखेगा:

<LinearLayout 
    xmlns:android='http://schemas.android.com/apk/res/android'
    android:layout_width='match_parent'
    android:layout_height='match_parent'
    android:orientation='vertical'
    android:padding='16dp'>

    <TextView
        android:id='@+id/welcomeTextView'
        android:layout_width='wrap_content'
        android:layout_height='wrap_content'
        android:text='अपना नाम दर्ज करें:'
        android:textSize='20sp' />

    <EditText
        android:id='@+id/nameEditText'
        android:layout_width='match_parent'
        android:layout_height='wrap_content'
        android:hint='यहाँ नाम लिखें' />

    <Button
        android:id='@+id/saveButton'
        android:layout_width='match_parent'
        android:layout_height='wrap_content'
        android:text='नाम सेव करें' />

</LinearLayout>
---

स्टेप 2: SharedPreferences को इनिशियलाइज करना (Kotlin Code)

अब हम अपनी MainActivity.kt फाइल में कोडिंग करेंगे। SharedPreferences का इस्तेमाल करने के लिए हमें सबसे पहले इसका एक ऑब्जेक्ट बनाना होगा।

val sharedPreferences = getSharedPreferences("UserPrefs", Context.MODE_PRIVATE)

यहाँ दो चीजें ध्यान देने योग्य हैं:

  • "UserPrefs": यह हमारी सेव होने वाली फाइल का नाम है। आप कुछ भी नाम रख सकते हैं।
  • Context.MODE_PRIVATE: इसका मतलब है कि इस फाइल में सेव किया गया डेटा केवल इसी ऐप द्वारा पढ़ा जा सकता है, कोई दूसरा ऐप इसे एक्सेस नहीं कर पाएगा। यह सुरक्षा के लिए जरूरी है।
---

स्टेप 3: डेटा को सेव कैसे करें? (Writing Data)

डेटा सेव करने के लिए हमें SharedPreferences के Editor ऑब्जेक्ट का इस्तेमाल करना होता है। जब यूजर 'नाम सेव करें' बटन पर क्लिक करेगा, तब हम यह कोड चलाएंगे:

val saveButton = findViewById<Button>(R.id.saveButton)
val nameEditText = findViewById<EditText>(R.id.nameEditText)
val welcomeTextView = findViewById<TextView>(R.id.welcomeTextView)

saveButton.setOnClickListener {
    val enteredName = nameEditText.text.toString().trim()

    if (enteredName.isNotEmpty()) {
        // Editor को ओपन करें
        val editor = sharedPreferences.edit()
        
        // Key-Value के रूप में डेटा डालें
        editor.putString("user_name", enteredName)
        
        // बदलावों को सेव करें
        editor.apply() 

        welcomeTextView.text = "Welcome, $enteredName!"
        nameEditText.visibility = View.GONE
        saveButton.visibility = View.GONE
    }
}

महत्वपूर्ण नोट: डेटा डालने के बाद editor.apply() लिखना न भूलें। इसके बिना आपका डेटा मेमोरी में राइट (Write) नहीं होगा।

---

स्टेप 4: सेव किए गए डेटा को लोड कैसे करें? (Reading Data)

अब सबसे जादुई हिस्सा! जब यूजर ऐप को पूरी तरह बंद करके फिर से खोलेगा, तब हमें चेक करना है कि क्या पहले से कोई नाम सेव है। इसके लिए हम onCreate() मेथड के अंदर यह कोड लिखेंगे:

val savedName = sharedPreferences.getString("user_name", null)

if (savedName != null) {
    // अगर नाम पहले से सेव है, तो डायरेक्ट वेलकम मैसेज दिखाएं
    welcomeTextView.text = "Welcome back, $savedName!"
    nameEditText.visibility = View.GONE
    saveButton.visibility = View.GONE
}

यहाँ getString("user_name", null) में पहला पैरामीटर हमारी Key है, और दूसरा पैरामीटर Default Value (डिफ़ॉल्ट वैल्यू) है। इसका मतलब है कि अगर "user_name" नाम की कोई की (Key) नहीं मिलती, तो ऐप रिटर्न में null देगा।

---

apply() बनाम commit(): दोनों में क्या अंतर है?

अक्सर इंटरव्यू और नए डेवलपर्स के बीच यह सवाल उठता है कि डेटा सेव करने के लिए apply() का इस्तेमाल करें या commit() का? आइए इनके अंतर को आसान टेबल से समझते हैं:

फीचर apply() commit()
प्रोसेस यह एसिंक्रोनस (Asynchronous) है। यह बैकग्राउंड में डेटा सेव करता है। यह सिंक्रोनस (Synchronous) है। यह तुरंत मेन थ्रेड पर डेटा लिखता है।
स्पीड बहुत तेज है क्योंकि यह ऐप के परफॉर्मेंस को नहीं रोकता। धीमा है, भारी डेटा होने पर ऐप लैग (Lag) हो सकता है।
रिटर्न टाइप कोई वैल्यू रिटर्न नहीं करता (Void)। सफलता या विफलता बताने के लिए Boolean (true/false) रिटर्न करता है।

सलाह: 99% मामलों में आपको हमेशा apply() का ही इस्तेमाल करना चाहिए ताकि आपका ऐप स्मूथ चले।

---

SharedPreferences का इस्तेमाल करते समय 3 बड़ी गलतियाँ (जिन्हें टालना है)

  1. संवेदनशील डेटा सेव करना: कभी भी पासवर्ड, क्रेडिट कार्ड डिटेल्स, या पर्सनल एपीआई की (API Keys) को SharedPreferences में प्लेन टेक्स्ट में सेव न करें। इसे आसानी से हैक किया जा सकता है। संवेदनशील डेटा के लिए EncryptedSharedPreferences का उपयोग करें।
  2. बहुत बड़ा डेटा स्टोर करना: यह केवल छोटी सेटिंग्स के लिए है। अगर आपके पास पूरी यूजर लिस्ट या बड़ा JSON डेटा है, तो SQLite या Room Database का इस्तेमाल करें।
  3. बार-बार एडिट करना: लूप (Loop) के अंदर बार-बार apply() कॉल न करें। इससे डिस्क राइटिंग बढ़ जाती है और फोन स्लो हो सकता है।
---

निष्कर्ष

एंड्रॉइड ऐप डेवलपमेंट में यूजर एक्सपीरियंस को बेहतर बनाने के लिए SharedPreferences एक बुनियादी और बेहद जरूरी टूल है। इस ट्यूटोरियल की मदद से अब आप आसानी से अपने ऐप में यूजर की सेटिंग्स, थीम प्रेफरेंस और लॉगिन सेशन को मैनेज कर सकते हैं। इसे अपने अगले प्रोजेक्ट में जरूर ट्राई करें!

---

अक्सर पूछे जाने वाले प्रश्न (FAQs)

1. क्या ऐप अनइंस्टॉल करने पर SharedPreferences का डेटा डिलीट हो जाता है?

हाँ, जब कोई यूजर आपके ऐप को फोन से अनइंस्टॉल (Uninstall) करता है, तो उसके साथ ही SharedPreferences में सेव किया गया सारा डेटा भी हमेशा के लिए डिलीट हो जाता है।

2. SharedPreferences में हम किस-किस तरह का डेटा सेव कर सकते हैं?

आप इसमें केवल प्रिमिटिव डेटा टाइप्स (Primitive Data Types) ही सेव कर सकते हैं, जैसे: String, Int, Boolean, Float, Long और Set of Strings।

3. क्या SharedPreferences का कोई आधुनिक विकल्प (Alternative) भी है?

हाँ! गूगल ने अब SharedPreferences के विकल्प के रूप में Jetpack DataStore को पेश किया है। यह कोटलिन कोरूटिन (Kotlin Coroutines) पर काम करता है और बड़े ऐप्स के लिए ज्यादा सुरक्षित और एडवांस माना जाता है। लेकिन बेसिक और छोटे ऐप्स के लिए आज भी SharedPreferences सबसे आसान तरीका है।

Post a Comment

0 Comments