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. เพิ่มไลบรารีการบันทึก Structured Data ลงในโปรเจ็กต์
เพิ่มทรัพยากร 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 >ใช้ชื่อ > 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()
)
}
}
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ส่วนย่อย
มาเรียกใช้ 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
ของไลบรารีการบันทึกข้อมูลที่มีโครงสร้าง
ในการดึงข้อมูล แบบสอบถามของคุณจะต้องเขียนขึ้นเพื่อระบุข้อมูลเกี่ยวกับวิธีดึงข้อมูล โชคดีที่มีแบบสอบถามตัวอย่างได้รับการตั้งค่าไว้สำหรับการดึงข้อมูลตามคำจำกัดความแล้ว
ค้นหาเมธอด 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
ที่เราได้รับแล้วก่อนหน้านี้ และแสดงผล Bundle ธุรกรรม 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
ขั้นตอนถัดไป
- สำรวจเอกสารประกอบสำหรับไลบรารีการบันทึกข้อมูลที่มีโครงสร้าง
- ปรับแต่งรูปลักษณ์และความรู้สึกของแบบสอบถามที่แสดงผล
- ใช้ไลบรารีการบันทึก Structured Data ในแอป Android ของคุณเอง