AD

Android Studio में Explicit Intent से दो Screens के बीच डेटा ट्रांसफर करें: स्टेप-बाय-स्टेप ट्यूटोरियल

Android Studio में Explicit Intent से दो Screens के बीच डेटा ट्रांसफर करें: स्टेप-बाय-स्टेप ट्यूटोरियल

Android Apps में Screens के बीच डेटा कैसे मूव होता है?

जब भी आप किसी ई-कॉमर्स ऐप में प्रोडक्ट लिस्ट पर क्लिक करके प्रोडक्ट डिटेल्स पेज पर जाते हैं, या लॉगिन स्क्रीन पर नाम डालकर सीधे डैशबोर्ड पर पहुँचते हैं, तो बैकग्राउंड में एंड्रॉइड का एक कोर कॉन्सेप्ट काम कर रहा होता है—Intent।

एंड्रॉइड ऐप डेवलपमेंट की शुरुआत करते समय सबसे पहली चुनौती यही आती है कि एक स्क्रीन (Activity) से दूसरी स्क्रीन तक यूजर का डेटा सुरक्षित और सही तरीके से कैसे पहुँचाया जाए। इस ट्यूटोरियल में हम बिल्कुल स्क्रैच से सीखेंगे कि Explicit Intent और Bundle/putExtra की मदद से दो Activities के बीच डेटा कैसे ट्रांसफर किया जाता है।

हम क्या बनाने वाले हैं? (हमारा रियल-वर्ल्ड प्रोजेक्ट)

सिर्फ थ्योरी रटने के बजाय हम एक हैंड्स-ऑन प्रोजेक्ट बनाएंगे: 'Visitor Pass App'। इस ऐप में पहली स्क्रीन पर यूजर अपना नाम और डिपार्टमेंट दर्ज करेगा, सबमिट बटन दबाएगा, और दूसरी स्क्रीन पर उसका डिजिटल आईडी कार्ड डायनामिक डेटा के साथ डिस्प्ले होगा।

स्टेप 1: नया प्रोजेक्ट तैयार करें

शुरुआत करने के लिए अपने कंप्यूटर में Android Studio खोलें और ये स्टेप्स फॉलो करें:

  • New Project पर क्लिक करें और Empty Views Activity चुनें।
  • प्रोजेक्ट का नाम रखें: VisitorPassApp।
  • Language में Kotlin चुनें और Minimum SDK को API 24 या उससे ऊपर रखें।
  • प्रोजेक्ट लोड होने के बाद, ऐप मॉड्यूल पर राइट क्लिक करके New > Activity > Empty Views Activity चुनें और इसका नाम ProfileActivity रखें।

अब आपके प्रोजेक्ट में दो Activities होंगी: MainActivity (डेटा भेजने वाली) और ProfileActivity (डेटा रिसीव करने वाली)।

स्टेप 2: पहली स्क्रीन का लेआउट (activity_main.xml) डिजाइन करें

पहली स्क्रीन में हमें यूजर से दो इनपुट लेने हैं: नाम और डिपार्टमेंट, साथ ही एक बटन। res/layout/activity_main.xml फाइल खोलें और लीनियर या कॉन्स्ट्रेंट लेआउट में इन तीन कंपोनेंट्स को सेट करें:

यहाँ लेआउट के मुख्य व्यू एलिमेंट्स दिए गए हैं:

  • EditText (id: etUserName): यूजर का नाम एंटर करने के लिए।
  • EditText (id: etDepartment): यूजर की फील्ड या डिपार्टमेंट दर्ज करने के लिए।
  • Button (id: btnSubmit): डेटा सबमिट करके दूसरी स्क्रीन पर जाने के लिए।

ध्यान रखें कि दोनों EditText में android:hint जरूर सेट करें ताकि यूजर को पता रहे कि किस बॉक्स में क्या भरना है।

स्टेप 3: MainActivity.kt में Explicit Intent तैयार करें

अब हमें कोड के जरिए बटन क्लिक इवेंट हैंडल करना है। जब यूजर बटन दबाएगा, तो हम दोनों टेक्स्ट फील्ड्स से वैल्यू निकालेंगे और उन्हें Intent में बांधकर दूसरी स्क्रीन की ओर भेजेंगे।

MainActivity.kt फाइल में onCreate मेथड के अंदर निम्नलिखित लॉजिक लिखें:

val etName = findViewById<EditText>(R.id.etUserName)
val etDept = findViewById<EditText>(R.id.etDepartment)
val btnSubmit = findViewById<Button>(R.id.btnSubmit)

btnSubmit.setOnClickListener {
    val name = etName.text.toString().trim()
    val department = etDept.text.toString().trim()

    if (name.isEmpty() || department.isEmpty()) {
        Toast.makeText(this, "कृपया सभी फील्ड्स भरें", Toast.LENGTH_SHORT).show()
    } else {
        val intent = Intent(this, ProfileActivity::class.java).apply {
            putExtra("EXTRA_USER_NAME", name)
            putExtra("EXTRA_DEPARTMENT", department)
        }
        startActivity(intent)
    }
}

यहाँ क्या हुआ? कोड को समझें:

Intent(this, ProfileActivity::class.java): इसे Explicit Intent कहते हैं क्योंकि हमने सिस्टम को साफ तौर पर बता दिया है कि हमें किस टारगेट क्लास (ProfileActivity) को खोलना है।

putExtra(Key, Value): यह एक तरह का पार्सल सिस्टम है। हम 'Key' (जैसे EXTRA_USER_NAME) के साथ वैल्यू को अटैच करते हैं। दूसरी स्क्रीन पर डेटा निकालने के लिए यही Key काम आएगी।

स्टेप 4: दूसरी स्क्रीन का लेआउट (activity_profile.xml) तैयार करें

दूसरी स्क्रीन activity_profile.xml बहुत सिंपल होगी। इसमें हमें केवल डेटा को डिस्प्ले करना है:

  • TextView (id: tvShowName): जहाँ यूजर का नाम दिखाई देगा।
  • TextView (id: tvShowDept): जहाँ डिपार्टमेंट का नाम दिखाई देगा।
  • Button (id: btnBack): वापस पहली स्क्रीन पर जाने के लिए।

स्टेप 5: ProfileActivity.kt में डेटा रिसीव करें

अब दूसरी एक्टिविटी में हमें पहली एक्टिविटी से भेजा गया पार्सल खोलना है। ProfileActivity.kt में निम्नलिखित कोड लिखें:

val tvName = findViewById<TextView>(R.id.tvShowName)
val tvDept = findViewById<TextView>(R.id.tvShowDept)
val btnBack = findViewById<Button>(R.id.btnBack)

val userName = intent.getStringExtra("EXTRA_USER_NAME")
val userDept = intent.getStringExtra("EXTRA_DEPARTMENT")

tvName.text = "स्वागत है, $userName!"
tvDept.text = "डिपार्टमेंट: $userDept"

btnBack.setOnClickListener {
    finish()
}

intent.getStringExtra("Key"): जिस Key से हमने डेटा भेजा था, उसी Key को पास करके हम स्ट्रिंग वैल्यू फेच कर लेते हैं। finish() मेथड वर्तमान एक्टिविटी को बंद करके यूजर को सीधे पिछली स्क्रीन पर लौटा देता है।

बिगिनर्स द्वारा की जाने वाली 3 सामान्य गलतियाँ और उनका समाधान

1. Key के नाम में स्पेलिंग मिस्टेक

यदि आपने भेजते समय putExtra("USER_NAME", ...) लिखा और रिसीव करते समय getStringExtra("username") लिख दिया, तो केस-सेंसिटिव होने के कारण ऐप में डेटा नल (Null) आएगा।

समाधान: Keys को हार्डकोड करने के बजाय Kotlin के companion object में कॉन्स्टेंट बनाकर इस्तेमाल करें। जैसे: const val KEY_NAME = "extra_name"।

2. Manifest में Activity रजिस्टर न होना

अगर आप Android Studio के डिफॉल्ट विजार्ड के बजाय मैन्युअली Kotlin फाइल बनाते हैं, तो कभी-कभी AndroidManifest.xml में एक्टिविटी छूट जाती है, जिससे ऐप तुरंत क्रैश (ActivityNotFoundException) हो जाता है। हमेशा जांचें कि आपकी दूसरी एक्टिविटी मैनिफेस्ट के अंदर <activity> टैग में मौजूद हो।

3. बहुत बड़ा डेटा पास करने की कोशिश करना

Intent के जरिए केवल छोटा डेटा (जैसे ID, नाम, टोकन) ही भेजा जाना चाहिए। यदि आप पूरी इमेज या 10 MB की लिस्ट Intent से भेजने की कोशिश करेंगे, तो एंड्रॉइड में TransactionTooLargeException आ जाएगी। भारी डेटा के लिए रूम डेटाबेस या ViewModel का उपयोग करना सही अप्रोच है।

ऐप को टेस्ट कैसे करें?

अब अपने फोन में USB Debugging ऑन करके या Android Studio के एमुलेटर पर रन बटन (Shift + F10) दबाएं। पहली स्क्रीन पर नाम 'Rahul' और डिपार्टमेंट 'Engineering' डालें और सबमिट करें। आप देखेंगे कि बिना किसी लैग के ProfileActivity स्क्रीन पर आपका नाम और डिपार्टमेंट रेंडर हो चुका है।

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

1. Explicit Intent और Implicit Intent में क्या फर्क है?

Explicit Intent का उपयोग तब होता है जब आपको ऐप के अंदर ही किसी तय Activity पर जाना हो। Implicit Intent का उपयोग तब होता है जब आपको किसी बाहरी ऐप की सर्विस चाहिए होती है, जैसे कैमरा खोलना, डायल पैड लॉन्च करना या वेब ब्राउजर में लिंक खोलना।

2. क्या हम Intent से कस्टम ऑब्जेक्ट्स पास कर सकते हैं?

हाँ, आप कस्टम डेटा क्लास या ऑब्जेक्ट पास कर सकते हैं, लेकिन इसके लिए आपकी Kotlin क्लास को Parcelable या Serializable इंटरफेस को इम्प्लीमेंट करना जरूरी होता है। एंड्रॉइड में परफॉरमेंस के लिए Parcelize प्लगइन सबसे बेस्ट माना जाता है।

3. डेटा वापस पहली एक्टिविटी में भेजना हो तो क्या करें?

यदि आपको दूसरी एक्टिविटी से डेटा वापस पहली एक्टिविटी पर लाना है (जैसे कोई आइटम सेलेक्ट करके लौटना), तो मॉडर्न एंड्रॉइड में Activity Result API (registerForActivityResult) का उपयोग किया जाता है।

Post a Comment

0 Comments