1. ก่อนเริ่มต้น
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีสร้างแอป Android ด้วย Structured Data Capture Library แอปของคุณจะใช้ Structured Data Capture Library เพื่อแสดงผลและประมวลผลแบบสอบถามและการตอบกลับ FHIR
สิ่งที่คุณจะได้เรียนรู้
- วิธีผสานรวม Structured Data Capture Library เข้ากับแอปพลิเคชัน Android
- วิธีแสดงแบบสอบถาม
- วิธีรับคำตอบในฐานะ
QuestionnaireResponse
- วิธีดึงข้อมูลทรัพยากร FHIR จาก
QuestionnaireResponse
สิ่งที่คุณต้องมี
- Android Studio (v4.1.2 ขึ้นไป) เวอร์ชันล่าสุด
- Android Emulator หรืออุปกรณ์ Android
- โค้ดตัวอย่าง
- ความรู้พื้นฐานเกี่ยวกับการพัฒนาแอป Android ใน Kotlin
Codelab นี้มุ่งเน้นที่ Structured Data Capture Library แนวคิดและบล็อกโค้ดที่ไม่เกี่ยวข้องจะได้รับการอธิบายอย่างคร่าวๆ และให้คุณคัดลอกและวางได้ง่ายๆ หากไม่เคยสร้างแอป Android มาก่อน ให้เริ่มต้นด้วยการสร้างแอปแรก
2. ตั้งค่า
ดาวน์โหลดรหัส
หากต้องการดาวน์โหลดโค้ดสําหรับโค้ดแล็บนี้ ให้โคลนที่เก็บรีโป Android FHIR SDK: git clone https://github.com/google/android-fhir.git
โปรเจ็กต์เริ่มต้นสำหรับ Codelab นี้อยู่ใน codelabs/datacapture
นําเข้าแอปไปยัง Android Studio
มาเริ่มกันด้วยการนําเข้าแอปเริ่มต้นไปยัง Android Studio
เปิด Android Studio เลือกนําเข้าโปรเจ็กต์ (Gradle, Eclipse ADT ฯลฯ) แล้วเลือกโฟลเดอร์ codelabs/datacapture
จากซอร์สโค้ดที่คุณดาวน์โหลดไว้ก่อนหน้านี้
เรียกใช้แอปเริ่มต้น
เมื่อนําเข้าโปรเจ็กต์ไปยัง Android Studio แล้ว คุณก็พร้อมเรียกใช้แอปเป็นครั้งแรก
เชื่อมต่ออุปกรณ์ Android ผ่าน USB กับโฮสต์ หรือเริ่มโปรแกรมจำลอง Android Studio แล้วคลิก "เรียกใช้" () ในแถบเครื่องมือ Android Studio
อย่างที่คุณเห็น ยังมีข้อมูลไม่มากนัก เรามาเริ่มแสดงแบบสอบถามในแอปกันเลย
3. เพิ่มไลบรารีการบันทึก Structured Data ลงในโปรเจ็กต์
เพิ่มการพึ่งพาสําหรับคลังการบันทึก Structured Data
Dependency ของ Structured Data Capture Library ช่วยให้คุณผสานรวม Structured Data Capture Library ในแอปได้ เพิ่มบรรทัดต่อไปนี้ลงท้ายไฟล์ app/build.gradle.kts
ของโปรเจ็กต์
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.2.0")
implementation("androidx.fragment:fragment-ktx:1.6.0")
}
ซิงค์โปรเจ็กต์กับไฟล์ Gradle
คุณควรซิงค์โปรเจ็กต์กับไฟล์ Gradle ในตอนนี้เพื่อให้แน่ใจว่าแอปของคุณจะใช้ Dependency ทั้งหมดได้
เลือกซิงค์โปรเจ็กต์กับไฟล์ Gradle () จากแถบเครื่องมือของ Android Studio นอกจากนี้ คุณยังเรียกใช้แอปอีกครั้งเพื่อตรวจสอบว่า Dependency ทํางานอย่างถูกต้องหรือไม่
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
ขั้นตอนที่ 1: เพิ่ม FragmentContainerView
เพิ่ม FragmentContainerView
ลงในเลย์เอาต์ของแอปพลิเคชัน ช่องนี้คือที่ที่ QuestionnaireFragment
ที่คุณสร้างในภายหลังจะแสดง
- เปิด
activity_main.xml
(res > layout > activity_main.xml) - ค้นหาตัวเลือกสำหรับมุมมองโค้ด แยก และการออกแบบที่ด้านขวาบนของเครื่องมือแก้ไขเลย์เอาต์
- เลือกมุมมองโค้ด
- คุณไม่จำเป็นต้องใช้
TextView
ดังนั้นให้ลบออก อย่าลืมลบทุกอย่างตั้งแต่<TextView
ไปจนถึง/>
ตัวปิด - เพิ่ม
FragmentContainerView
ไว้ในConstraintLayout
ไฟล์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>
ขั้นตอนที่ 2: กำหนดค่า QuestionnaireFragment
QuestionnaireFragment
ต้องใช้แบบสอบถาม FHIR ที่เข้ารหัส JSON จึงจะแสดงผลได้ เนื่องจากแบบสอบถามมีขนาดเล็ก (<512 KB) คุณจึงจะรวมแบบสอบถามเป็น String
ใน Bundle
ของอาร์กิวเมนต์ที่จะใช้สร้างข้อมูลโค้ด ควรส่งแบบสอบถามขนาดใหญ่เป็น URI
เพื่อเหตุผลด้านประสิทธิภาพ
คุณสามารถดูไฟล์ questionnaire.json
ได้หากต้องการ แต่ข้อดีอย่างหนึ่งของ Structured Data Capture Library คือคุณไม่จําเป็นต้องทราบโครงสร้างของแบบสอบถาม FHIR (หรือข้อมูลใดๆ เกี่ยวกับ FHIR) เพื่อทำให้แสดงผล คุณจะดูไฟล์นี้อย่างละเอียดในภายหลังใน Codelab
สร้าง QuestionnaireFragment
โดยใช้เครื่องมือสร้าง และตั้งค่าแบบสอบถามโดยใช้ฟังก์ชันตัวตั้งค่า หากต้องการแสดง QuestionnaireFragment
ภายในคอนเทนเนอร์เลย์เอาต์ ให้ใช้ FragmentManager
เพื่อสร้าง FragmentTransaction
เปิด MainActivity.kt
แล้วเพิ่มโค้ดต่อไปนี้ลงในคลาส MainActivity
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
ขั้นตอนที่ 3: เพิ่ม 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()
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ข้อมูลโค้ด
มาเรียกใช้ Codelab โดยคลิก "เรียกใช้" () ในแถบเครื่องมือของ Android Studio คุณควรเห็นข้อมูลลักษณะนี้
ไปยังส่วนต่างๆ ของแบบสอบถามและลองป้อนคำตอบ มีการใช้วิดเจ็ตคำตอบที่แตกต่างกัน 2-3 รายการ ซึ่งรวมถึงบูลีน ข้อความ และวันที่ ซึ่งแสดงผลโดยอัตโนมัติตามประเภทพื้นฐานในแบบสอบถาม 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 Codelab นี้ใช้ไลบรารี HAPI FHIR อื่นๆ เพื่อแปลงเป็นสตริง JSON เพื่อดูในบันทึก
เรียกใช้แอปอีกครั้งเพื่อสร้างแอปใหม่ด้วยการเปลี่ยนแปลงล่าสุด เมื่อการทดสอบเริ่มทํางานแล้ว ให้ป้อนข้อมูลบางอย่างลงในแบบสอบถาม แล้วแตะส่ง ในบันทึก คุณควรเห็นข้อความที่มี 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. ดึงข้อมูลทรัพยากร FHIR จาก QuestionnaireResponse
แบบสอบถามที่รวมอยู่ในโปรเจ็กต์เริ่มต้นมีไว้สำหรับขั้นตอนการลงทะเบียนผู้ป่วยแบบง่าย คุณจึงอาจต้องใช้คำตอบในแบบสอบถามเพื่อสร้างทรัพยากรผู้ป่วย FHIR โดยอิงตามคำตอบเหล่านั้น การแปลงคําตอบแบบสอบถามเป็นทรัพยากร FHIR นี้เรียกว่าการดึงข้อมูล ซึ่งทำได้โดยใช้คลาส ResourceMapper
ของ Structured Data Capture Library
หากต้องการดึงข้อมูล คุณต้องเขียนแบบสอบถามให้รวมข้อมูลเกี่ยวกับวิธีดึงข้อมูล แต่โชคดีที่แบบสํารวจตัวอย่างได้รับการตั้งค่าไว้สําหรับการดึงข้อมูลตามคําจํากัดความแล้ว
ค้นหาเมธอด 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 ที่มีทรัพยากรที่ดึงข้อมูลอย่างน้อย 1 รายการ ซึ่งในกรณีนี้จะเป็นทรัพยากรผู้ป่วยรายการเดียว
เรียกใช้แอปอีกครั้งเพื่อสร้างแอปใหม่ด้วยการเปลี่ยนแปลงล่าสุด เมื่อเปิดใช้งานแล้ว ให้ป้อนข้อมูลบางส่วนแล้วแตะส่ง ในบันทึก คุณควรเห็นข้อความ extraction result
ที่มีการแสดง JSON ของกลุ่ม FHIR ที่ดึงข้อมูล
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7. ยินดีด้วย
คุณใช้ Structured Data Capture Library เพื่อประมวลผลแบบสอบถามและคำตอบ FHIR ในแอปแล้ว
- แสดงแบบสอบถาม
- รับคําตอบจากแบบสอบถาม
- ดึงข้อมูลทรัพยากร FHIR จาก
QuestionnaireResponse
เท่านี้ก็พร้อมใช้งานแล้ว
เมื่อดำเนินการต่อ คุณอาจต้องทำงานกับทรัพยากร FHIR ในลักษณะอื่นๆ เพิ่มเติมในแอปพลิเคชัน ดูไลบรารี FHIR Engine ของ Android FHIR SDK เพื่อดูวิธีจัดเก็บและจัดการทรัพยากร FHIR ในพื้นที่ในแอปพลิเคชัน และซิงค์ข้อมูลกับเซิร์ฟเวอร์ FHIR ระยะไกล
สิ่งที่เราได้พูดถึง
- วิธีเพิ่มคลังการจับ Structured Data ลงในแอป Android
- วิธีใช้
QuestionnaireFragment
และResourceMapper
เพื่อทำงานกับแบบสอบถาม FHIR
ขั้นตอนถัดไป
- ดูเอกสารประกอบเกี่ยวกับ Structured Data Capture Library
- ปรับแต่งรูปลักษณ์ของแบบสอบถามที่แสดงผล
- ใช้ Structured Data Capture Library ในแอป Android ของคุณเอง