1. शुरू करने से पहले
आपको क्या बनाना है
इस कोडलैब में, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की मदद से Android ऐप्लिकेशन बनाने का तरीका बताया गया है. आपका ऐप्लिकेशन, FHIR Questionnaires और जवाबों को रेंडर और प्रोसेस करने के लिए, Structured Data Capture Library का इस्तेमाल करेगा.
आपको क्या सीखने को मिलेगा
- अपने Android ऐप्लिकेशन में Structured Data Capture Library को इंटिग्रेट करने का तरीका
- सवालों की सूची दिखाने का तरीका
QuestionnaireResponseके तौर पर जवाब पाने का तरीकाQuestionnaireResponseसे FHIR संसाधन निकालने का तरीका
आपको किन चीज़ों की ज़रूरत होगी
- Android Studio (v4.1.2+) का नया वर्शन
- Android Emulator या Android डिवाइस
- सैंपल कोड
- Kotlin में Android डेवलपमेंट की बुनियादी जानकारी
यह कोडलैब, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी पर फ़ोकस करता है. काम के न होने वाले कॉन्सेप्ट और कोड ब्लॉक को हटा दिया जाता है. साथ ही, आपको सिर्फ़ कॉपी और पेस्ट करने के लिए कॉन्सेप्ट और कोड ब्लॉक दिए जाते हैं. अगर आपने पहले कभी Android ऐप्लिकेशन नहीं बनाए हैं, तो अपना पहला ऐप्लिकेशन बनाकर शुरुआत करें.
2. सेट अप करें
कोड डाउनलोड करना
इस कोडलैब के लिए कोड डाउनलोड करने के लिए, Android FHIR SDK की रेपो क्लोन करें: git clone https://github.com/google/android-fhir.git
इस कोडलैब का स्टार्टर प्रोजेक्ट, codelabs/datacapture में मौजूद है.
ऐप्लिकेशन को Android Studio में इंपोर्ट करना
चलिए, Android Studio में स्टार्टर ऐप्लिकेशन इंपोर्ट करके शुरू करते हैं.
Android Studio खोलें. इसके बाद, Import Project (Gradle, Eclipse ADT, etc.) को चुनें. अब सोर्स कोड से codelabs/datacapture फ़ोल्डर चुनें. यह वही सोर्स कोड होना चाहिए जिसे आपने पहले डाउनलोड किया था.

स्टार्टर ऐप्लिकेशन चलाना
प्रोजेक्ट को Android Studio में इंपोर्ट करने के बाद, अब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं.
अपने Android डिवाइस को यूएसबी के ज़रिए होस्ट से कनेक्ट करें या Android Studio Emulator शुरू करें. इसके बाद, Android Studio टूलबार में मौजूद 'चलाएं' (
) पर क्लिक करें.

जैसा कि आप देख सकते हैं कि यहां अब तक ज़्यादा जानकारी नहीं है. इसलिए, आइए सीधे आपके ऐप्लिकेशन में सवालों की सूची दिखाने का तरीका जानें!
3. प्रोजेक्ट में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी जोड़ना
स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी के लिए डिपेंडेंसी जोड़ना
स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की डिपेंडेंसी की मदद से, अपने ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी को इंटिग्रेट किया जा सकता है. अपने प्रोजेक्ट की app/build.gradle.kts फ़ाइल के आखिर में ये लाइनें जोड़ें:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.2.0")
implementation("androidx.fragment:fragment-ktx:1.6.0")
}
अपने प्रोजेक्ट को Gradle फ़ाइलों के साथ सिंक करना
यह पक्का करने के लिए कि आपके ऐप्लिकेशन के लिए सभी डिपेंडेंसी उपलब्ध हैं, आपको इस समय अपने प्रोजेक्ट को ग्रेडल फ़ाइलों के साथ सिंक करना चाहिए.
Android Studio के टूलबार में जाकर, सिंक प्रोजेक्ट विद Gradle फ़ाइलें (
) को चुनें. यह देखने के लिए कि डिपेंडेंसी सही तरीके से काम कर रही हैं या नहीं, ऐप्लिकेशन को फिर से चलाया जा सकता है.
4. सवालों की सूची दिखाना
इस चरण में, आपको स्टार्टर ऐप्लिकेशन में यह सुविधा जोड़नी होगी, ताकि FragmentContainerView में सवालों की सूची रेंडर की जा सके.
इस दौरान, Android Studio आपसे ज़रूरी इंपोर्ट जोड़ने के लिए कहेगा:
androidx.core.os.bundleOfandroidx.fragment.app.addandroidx.fragment.app.commitandroid.util.Logcom.google.android.fhir.datacapture.QuestionnaireFragment
पहला चरण: FragmentContainerView जोड़ना
ऐप्लिकेशन के लेआउट में FragmentContainerView जोड़ें. यहाँ आपको बाद में बनाए जाने वाले QuestionnaireFragment दिखेंगे.
activity_main.xml(res > layout > activity_main.xml) खोलें.- लेआउट एडिटर में सबसे ऊपर दाईं ओर, कोड, स्प्लिट, और डिज़ाइन व्यू के विकल्प ढूंढें.
- कोड व्यू चुनें.

- आपको
TextViewकी ज़रूरत नहीं है, इसलिए इसे मिटा दें. पक्का करें कि आपने<TextViewसे लेकर/>तक का सारा डेटा मिटा दिया हो. ConstraintLayoutमेंFragmentContainerViewजोड़ें. आपकीactivity_main.xmlफ़ाइल कुछ ऐसी दिखनी चाहिए:<?xml version="1.0" encoding="utf-8" ?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <androidx.fragment.app.FragmentContainerView android:id="@+id/fragment_container_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
दूसरा चरण: QuestionnaireFragment को कॉन्फ़िगर करना
QuestionnaireFragment को रेंडर करने के लिए, JSON कोड में बदला गया FHIR Questionnaire ज़रूरी होता है. क्वेश्नेयर छोटा (<512 केबी) है. इसलिए, आपको इसे String के तौर पर, Bundle में शामिल करना होगा. इसका इस्तेमाल फ़्रैगमेंट बनाने के लिए किया जाएगा. परफ़ॉर्मेंस को बेहतर बनाने के लिए, बड़े सवालों के जवाब URI के तौर पर दिए जाने चाहिए.
अगर चाहें, तो questionnaire.json फ़ाइल देखी जा सकती है. हालांकि, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का एक फ़ायदा यह है कि इसे रेंडर करने के लिए, आपको FHIR Questionnaire के स्ट्रक्चर (या FHIR के बारे में किसी भी जानकारी) के बारे में जानने की ज़रूरत नहीं है! इस फ़ाइल के बारे में, आपको इस कोडलैब में बाद में ज़्यादा जानकारी मिलेगी.
इसके बिल्डर का इस्तेमाल करके QuestionnaireFragment बनाएं. साथ ही, सेटर फ़ंक्शन का इस्तेमाल करके प्रश्नावली सेट करें. लेआउट कंटेनर में QuestionnaireFragment दिखाने के लिए, FragmentManager का इस्तेमाल करके FragmentTransaction बनाएं.
MainActivity.kt खोलें और MainActivity क्लास में यह कोड जोड़ें:
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
तीसरा चरण: QuestionnaireFragment को FragmentContainerView में जोड़ना
लेआउट कंटेनर में QuestionnaireFragment दिखाने के लिए, FragmentManager का इस्तेमाल करके FragmentTransaction बनाएं. FragmentManager, पहले से बनाए गए questionnaireParams का इस्तेमाल करके इंस्टैंटिएशन को मैनेज करता है.
MainActivity क्लास में यह कोड जोड़ें:
// Step 3: Add the QuestionnaireFragment to the FragmentContainerView
if (savedInstanceState == null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
add(R.id.fragment_container_view, questionnaireFragment)
}
}
// Submit button callback
supportFragmentManager.setFragmentResultListener(
QuestionnaireFragment.SUBMIT_REQUEST_KEY,
this,
) { _, _ ->
submitQuestionnaire()
}
फ़्रैगमेंट इस्तेमाल करने के तरीके के बारे में ज़्यादा जानें.
Android Studio टूलबार में मौजूद, चलाएं (
) पर क्लिक करके, कोडलैब चलाएं. आपको कुछ ऐसा दिखेगा:

सवाल-जवाब वाले फ़ॉर्म में जाकर, कुछ जवाब डालें. इसमें जवाब देने के लिए, अलग-अलग तरह के विजेट इस्तेमाल किए गए हैं. जैसे, बूलियन, टेक्स्ट, और तारीखें. ये विजेट, ओरिजनल FHIR प्रश्नावली में मौजूद टाइप के आधार पर अपने-आप रेंडर हो गए थे.
तकनीकी तौर पर, किसी प्रश्नावली को रेंडर करने के लिए आपको बस इतना ही करना होता है! बधाई हो!
अगर आपको उपयोगकर्ताओं के जवाब नहीं दिखते हैं, तो प्रश्नावली का कोई फ़ायदा नहीं है. अब हम सवालों के जवाब पाने के अगले चरण पर चलते हैं!
5. सवालों के जवाब पाना
पिछले चरणों में, आपने अपने ऐप्लिकेशन में FHIR questionnaire को रेंडर किया था.
इस सेक्शन में, आपको QuestionnaireResponse के तौर पर प्रश्नावली के जवाब मिलेंगे.
submitQuestionnaire() तरीका ढूंढें और यह कोड जोड़ें:
// Get a questionnaire response
val fragment = supportFragmentManager.findFragmentById(R.id.fragment_container_view)
as QuestionnaireFragment
val questionnaireResponse = fragment.getQuestionnaireResponse()
// Print the response to the log
val jsonParser = FhirContext.forCached(FhirVersionEnum.R4).newJsonParser()
val questionnaireResponseString =
jsonParser.encodeResourceToString(questionnaireResponse)
Log.d("response", questionnaireResponseString)
सवाल-जवाब वाले फ़ॉर्म का जवाब पाने के लिए, पहले बनाए गए सवाल-जवाब वाले फ़ॉर्म के फ़्रैगमेंट को वापस पाएं. इसके बाद, getQuestionnaireResponse() तरीके का इस्तेमाल करें. इससे HAPI FHIR QuestionnaireResponse मिलता है. इसका इस्तेमाल सीधे तौर पर या Android FHIR SDK के अन्य हिस्सों के साथ किया जा सकता है. यह कोडलैब, इसे JSON स्ट्रिंग में बदलने के लिए अन्य HAPI FHIR लाइब्रेरी का इस्तेमाल करता है, ताकि इसे लॉग में देखा जा सके.
अपने किए गए नए बदलावों के साथ ऐप्लिकेशन को फिर से बनाने के लिए, उसे फिर से चलाएं. इसके चालू होने के बाद, सवालों की सूची में कुछ जानकारी डालें और सबमिट करें पर टैप करें. आपको लॉग में एक मैसेज दिखेगा. इसमें QuestionnaireResponse को JSON के तौर पर दिखाया गया होगा.
D/response: {"resourceType":"QuestionnaireResponse","item":[{"linkId":"PR","text":"Patient information","item":[{"linkId":"PR-name","text":"Name","item":[{"linkId":"PR-name-given","text":"First Name","answer":[{"valueString":"Dani"}]},{"linkId":"PR-name-family","text":"Family Name","answer":[{"valueString":"Lee"}]}]},{"linkId":"PR-birthdate","text":"Date of Birth","answer":[{"valueDate":"1990-02-14"}]},{"linkId":"PR-id","text":"Identifying information","item":[{"linkId":"PR-name-id-url"},{"linkId":"PR-name-id","text":"Patient Id","answer":[{"valueString":"12345"}]}]}]}]}
6. QuestionnaireResponse से FHIR रिसॉर्स एक्सट्रैक्ट करना
स्टार्टर प्रोजेक्ट में शामिल प्रश्नावली, मरीज़ के रजिस्ट्रेशन की सामान्य प्रोसेस के लिए है. इसलिए, आपको प्रश्नावली के जवाबों का इस्तेमाल करके, उनके आधार पर FHIR Patient resource बनाना पड़ सकता है. सवाल-जवाब वाले फ़ॉर्म से मिले जवाब को FHIR संसाधनों में बदलने की प्रोसेस को डेटा एक्सट्रैक्शन कहा जाता है. हम स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की ResourceMapper क्लास का इस्तेमाल करके ऐसा कर सकते हैं.
डेटा निकालने के लिए, आपके सवालों के जवाब में यह जानकारी शामिल होनी चाहिए कि डेटा कैसे निकाला जाए. अच्छी बात यह है कि डेफ़िनिशन के आधार पर जानकारी निकालने के लिए, सैंपल सर्वे पहले से ही सेट अप किया गया है.
submitQuestionnaire() तरीका ढूंढें और यह कोड जोड़ें:
lifecycleScope.launch {
val questionnaire =
jsonParser.parseResource(questionnaireJsonString) as Questionnaire
val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}
ResourceMapper.extract() के लिए, HAPI FHIR Questionnaire की ज़रूरत होती है. इसे बनाने के लिए, आपको पहले के questionnaire JSON स्ट्रिंग को पार्स करना होगा. साथ ही, QuestionnaireResponse की भी ज़रूरत होगी, जो हमें पहले ही मिल चुका है. यह एक HAPI FHIR लेन-देन बंडल दिखाता है. इसमें निकाले गए एक या उससे ज़्यादा संसाधन होते हैं. इस मामले में, यह एक ही मरीज़ का संसाधन है.
अपने किए गए नए बदलावों के साथ ऐप्लिकेशन को फिर से बनाने के लिए, उसे फिर से चलाएं. इसके चालू होने के बाद, कुछ जानकारी डालें और सबमिट करें पर टैप करें. अब आपको लॉग में, extraction result मैसेज दिखेगा. इसमें निकाले गए FHIR बंडल का JSON फ़ॉर्मैट होगा.
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7. बधाई हो!
आपने अपने ऐप्लिकेशन में, FHIR प्रश्नावली और जवाबों को प्रोसेस करने के लिए, Structured Data Capture Library का इस्तेमाल किया हो:
- सवालों की सूची दिखाना
- सवालों के जवाब पाना
QuestionnaireResponseसे FHIR संसाधन एक्सट्रैक्ट करना
बस इतना ही करना है!
आगे बढ़ने पर, आपको अपने आवेदन में कई तरीकों से FHIR संसाधनों का इस्तेमाल करना पड़ सकता है. Android FHIR SDK की FHIR Engine Library देखें. इससे आपको यह जानने में मदद मिलेगी कि अपने ऐप्लिकेशन में FHIR संसाधनों को स्थानीय तौर पर कैसे सेव और मैनेज किया जाए. साथ ही, डेटा को रिमोट FHIR सर्वर के साथ कैसे सिंक किया जाए.
हमने क्या-क्या कवर किया है
- अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी जोड़ने का तरीका
- FHIR प्रश्नावली के साथ काम करने के लिए,
QuestionnaireFragmentऔरResourceMapperका इस्तेमाल कैसे करें
अगले चरण
- Structured Data Capture Library के दस्तावेज़ देखें
- रेंडर किए गए प्रश्नावली के लुक और स्टाइल को पसंद के मुताबिक बनाना
- अपने Android ऐप्लिकेशन में Structured Data Capture Library लागू करना