1. शुरू करने से पहले
आपको क्या बनाना है
इस कोडलैब में, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी की मदद से Android ऐप्लिकेशन बनाने का तरीका बताया गया है. आपका ऐप्लिकेशन, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का इस्तेमाल करके, FHIR सवालों और जवाबों को रेंडर और प्रोसेस करेगा.
आपको क्या सीखने को मिलेगा
- अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी को इंटिग्रेट करने का तरीका
- सवालों की सूची दिखाने का तरीका
QuestionnaireResponse
के तौर पर जवाब पाने का तरीकाQuestionnaireResponse
से FHIR संसाधनों को निकालने का तरीका
आपको किन चीज़ों की ज़रूरत होगी
- Android Studio (v4.1.2+) का नया वर्शन
- Android एमुलेटर या कोई 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 खोलें और प्रोजेक्ट इंपोर्ट करें (Gradle, Eclipse ADT वगैरह) को चुनें. इसके बाद, पहले डाउनलोड किए गए सोर्स कोड से codelabs/datacapture
फ़ोल्डर चुनें.
स्टार्टर ऐप्लिकेशन चलाना
प्रोजेक्ट को Android Studio में इंपोर्ट करने के बाद, ऐप्लिकेशन को पहली बार चलाया जा सकता है.
अपने Android डिवाइस को यूएसबी के ज़रिए होस्ट से कनेक्ट करें या Android Studio एमुलेटर शुरू करें. इसके बाद, 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.bundleOf
androidx.fragment.app.add
androidx.fragment.app.commit
android.util.Log
com.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 क्वेश्चनरी की ज़रूरत होती है. सवालों की सूची छोटी होने की वजह से (512 केबी से कम), आपको इसे ऑर्ग्युमेंट के Bundle
में String
के तौर पर शामिल करना होगा. इसका इस्तेमाल फ़्रैगमेंट बनाने के लिए किया जाएगा. परफ़ॉर्मेंस की वजह से, बड़े सवालों की सूची को URI
के तौर पर उपलब्ध कराया जाना चाहिए.
आपके पास questionnaire.json
फ़ाइल को देखने का विकल्प है. हालांकि, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का एक फ़ायदा यह है कि इसे रेंडर करने के लिए, आपको FHIR क्वेश्चनरी के स्ट्रक्चर या FHIR के बारे में कुछ भी जानने की ज़रूरत नहीं है! इस फ़ाइल के बारे में आपको कोडलैब में ज़्यादा जानकारी मिलेगी.
इसके बिल्डर का इस्तेमाल करके QuestionnaireFragment
बनाएं और सेटर फ़ंक्शन का इस्तेमाल करके सवालों की सूची सेट करें. लेआउट कंटेनर में QuestionnaireFragment
दिखाने के लिए, FragmentManager
का इस्तेमाल करके FragmentTransaction
बनाएं.
MainActivity.kt
खोलें और MainActivity
क्लास में यह कोड जोड़ें:
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
तीसरा चरण: FragmentContainerView में QuestionnaireFragment जोड़ना
लेआउट कंटेनर में 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 सवालों की सूची को रेंडर किया था.
इस सेक्शन में, आपको 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 मरीज रिसॉर्स बनाया जा सकता है. सवालों के जवाबों को 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 क्वेश्चननेयर की ज़रूरत होती है. इसे बनाने के लिए, पहले से मौजूद क्वेश्चननेयर की 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 से जुड़े सवालों और जवाबों को प्रोसेस करने के लिए, स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी का इस्तेमाल किया है:
- सवालों की सूची दिखाना
- सवालों की सूची का जवाब पाना
QuestionnaireResponse
से FHIR संसाधन निकालना
इसे चालू करने के लिए, आपको बस इतना ही करना है!
आगे बढ़ते हुए, हो सकता है कि आपको अपने पूरे ऐप्लिकेशन में FHIR संसाधनों के साथ कई तरीकों से काम करना हो. अपने ऐप्लिकेशन में स्थानीय तौर पर FHIR संसाधनों को सेव और मैनेज करने के साथ-साथ, डेटा को किसी रिमोट FHIR सर्वर के साथ सिंक करने का तरीका जानने के लिए, Android FHIR SDK की FHIR Engine Library देखें.
हमने क्या-क्या कवर किया है
- अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी जोड़ने का तरीका
- FHIR क्वेश्चनरी के साथ काम करने के लिए,
QuestionnaireFragment
औरResourceMapper
का इस्तेमाल करने का तरीका
अगले चरण
- स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी के लिए दस्तावेज़ देखें
- रेंडर किए गए सवालों के फ़ॉर्म को पसंद के मुताबिक बनाना
- अपने Android ऐप्लिकेशन में स्ट्रक्चर्ड डेटा कैप्चर लाइब्रेरी लागू करना