1. ก่อนเริ่มต้น
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณจะได้ดูวิธีสร้างแอป Android ด้วยไลบรารีการจับภาพข้อมูลที่มีโครงสร้าง แอปจะใช้ไลบรารีการบันทึกข้อมูลที่มีโครงสร้างเพื่อแสดงผลและประมวลผลแบบสอบถามและคำตอบ FHIR
สิ่งที่คุณจะได้เรียนรู้
- วิธีผสานรวมไลบรารีการดักจับข้อมูลที่มีโครงสร้างในแอปพลิเคชัน Android
- วิธีแสดงแบบสอบถาม
- วิธีรับคำตอบในฐานะ
QuestionnaireResponse
- วิธีดึงข้อมูลทรัพยากร FHIR จาก
QuestionnaireResponse
สิ่งที่ต้องมี
- Android Studio เวอร์ชันล่าสุด (v4.1.2+)
- โปรแกรมจำลอง Android หรืออุปกรณ์ Android จริง
- โค้ดตัวอย่าง
- ความรู้พื้นฐานเกี่ยวกับการพัฒนา Android ใน Kotlin
Codelab นี้มุ่งเน้นที่ไลบรารีการบันทึกข้อมูลที่มีโครงสร้าง แนวคิดและโค้ดบล็อกที่ไม่เกี่ยวข้องจะปรากฎขึ้นและมีไว้เพื่อให้คุณคัดลอกและวางได้อย่างง่ายดาย หากยังไม่เคยสร้างแอป Android มาก่อน ให้เริ่มด้วยการสร้างแอปแรก
2. ตั้งค่า
ดาวน์โหลดโค้ด
หากต้องการดาวน์โหลดโค้ดสำหรับ Codelab นี้ ให้โคลนที่เก็บ 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. เพิ่มไลบรารีการดักจับข้อมูลที่มีโครงสร้างลงในโปรเจ็กต์
เพิ่มทรัพยากร Dependency สำหรับไลบรารีการบันทึกข้อมูลที่มีโครงสร้าง
ทรัพยากร Dependency ของไลบรารีการบันทึกข้อมูลที่มีโครงสร้างช่วยให้คุณผสานรวมไลบรารีการดักจับข้อมูลที่มีโครงสร้างในแอปของคุณได้ เพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของไฟล์ app/build.gradle.kts
ของโปรเจ็กต์
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.0.0")
implementation("androidx.fragment:fragment-ktx:1.5.5")
}
ซิงค์โปรเจ็กต์กับไฟล์ 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
ลงใน FragmentContainerView
QuestionnaireFragment
ต้องใช้แบบสอบถาม FHIR ที่เข้ารหัส JSON เพื่อให้แสดงผล เนื่องจากแบบสอบถามมีขนาดเล็ก (<512 KB) คุณจะใส่แบบสอบถามดังกล่าวเป็น String
ในอาร์กิวเมนต์ Bundle
ที่จะใช้ในการสร้างส่วนย่อย ควรระบุแบบสอบถามขนาดใหญ่เป็น URI
เพื่อเหตุผลด้านประสิทธิภาพ
คุณจะดูไฟล์ questionnaire.json
ได้ หากต้องการ แต่ข้อดีอย่างหนึ่งของไลบรารีการบันทึกข้อมูลที่มีโครงสร้างคือคุณไม่จำเป็นต้องรู้โครงสร้างของแบบสอบถาม FHIR (หรือเรื่องอื่นๆ เกี่ยวกับ FHIR) เพื่อแสดงผล คุณจะตรวจสอบไฟล์นี้อย่างละเอียดใน Codelab ในภายหลัง
สร้าง QuestionnaireFragment
โดยใช้เครื่องมือสร้าง และตั้งค่าแบบสอบถามโดยใช้ฟังก์ชันตัวตั้งค่า หากต้องการแสดง QuestionnaireFragment
ภายในคอนเทนเนอร์เลย์เอาต์ ให้ใช้ FragmentManager
เพื่อสร้าง FragmentTransaction
เปิด MainActivity.kt
แล้วเพิ่มโค้ดต่อไปนี้ลงในชั้นเรียน MainActivity
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
if (savedInstanceState == null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
add(
R.id.fragment_container_view,
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
)
}
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ Fragment
ลองเรียกใช้ Codelab โดยคลิกเรียกใช้ () ในแถบเครื่องมือ 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 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
ของไลบรารีการบันทึกข้อมูลที่มีโครงสร้าง
หากต้องการดึงข้อมูล คุณต้องเขียนแบบสอบถามเพื่อระบุข้อมูลเกี่ยวกับวิธีดึงข้อมูล โชคดีที่แบบสอบถามตัวอย่างตั้งค่าไว้แล้วสำหรับการดึงข้อมูลตามคำนิยาม
ค้นหาเมธอด 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. ยินดีด้วย
คุณได้ใช้ไลบรารีการบันทึกข้อมูลที่มีโครงสร้างเพื่อประมวลผลแบบสอบถามและคำตอบ FHIR ในแอป ดังนี้
- แสดงแบบสอบถาม
- รับการตอบกลับแบบสอบถาม
- ดึงข้อมูลทรัพยากร FHIR จาก
QuestionnaireResponse
เท่านี้ก็เรียบร้อย
ขณะดำเนินการ คุณอาจต้องการใช้ทรัพยากร FHIR ด้วยวิธีการอื่นๆ เพิ่มเติมตลอดการสมัครของคุณ ไปที่ไลบรารี FHIR Engine ของ Android FHIR SDK เพื่อเรียนรู้วิธีจัดเก็บและจัดการทรัพยากร FHIR ภายในแอปพลิเคชันและซิงค์ข้อมูลกับเซิร์ฟเวอร์ FHIR ระยะไกล
สรุปประเด็นที่ได้พูดถึง
- วิธีเพิ่มไลบรารีการจับภาพข้อมูลที่มีโครงสร้างลงในแอป Android
- วิธีใช้
QuestionnaireFragment
และResourceMapper
เพื่อทำงานกับแบบสอบถาม FHIR
ขั้นตอนถัดไป
- ดูเอกสารประกอบสำหรับไลบรารีการบันทึกข้อมูลที่มีโครงสร้าง
- ปรับแต่งรูปลักษณ์ของแบบสอบถามที่แสดงผล
- ใช้ไลบรารีการบันทึกข้อมูลที่มีโครงสร้างในแอป Android ของคุณเอง