1. לפני שמתחילים
מה תפַתחו
ב-Codelab הזה תלמדו איך לפתח אפליקציה ל-Android עם ספריית תיעוד נתונים מובנים. האפליקציה שלך תשתמש בספריית הנתונים המובְנים כדי לעבד את השאלונים והתשובות של FHIR.
מה תלמדו
- איך משלבים את ספריית הנתונים המובְנים באפליקציה ל-Android
- איך להציג שאלון
- איך לקבל תשובות בתור
QuestionnaireResponse
- איך לחלץ משאבי FHIR מ-
QuestionnaireResponse
למה תזדקק?
- גרסה עדכנית של Android Studio (גרסה 4.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. הוספה של ספריית לכידת נתונים מובנים לפרויקט
מוסיפים את יחסי התלות של ספריית איסוף נתונים מובנים
יחסי התלות של ספריית איסוף הנתונים המובְנים מאפשרים לשלב באפליקציה את ספריית איסוף הנתונים המובְנים. מוסיפים את השורות הבאות בסוף הקובץ app/build.gradle.kts
של הפרויקט:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.0.0")
implementation("androidx.fragment:fragment-ktx:1.5.5")
}
סנכרון הפרויקט עם קובצי Gradle
כדי לוודא שכל יחסי התלות זמינים לאפליקציה שלכם, צריך לסנכרן את הפרויקט עם קובצי GRid בשלב הזה.
בסרגל הכלים של Android Studio, בוחרים באפשרות Sync Project with Gradle Files () של הפרויקט. צריך גם להריץ את האפליקציה שוב כדי לבדוק שיחסי התלות פועלים כראוי.
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
(רזולוציה > פריסה > 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. השאלון קטן (פחות מ-512KB), ולכן הוא יכלול כ-String
ב-Bundle
של ארגומנטים שישמשו ליצירת המקטע. כדי לשמור על רמת ביצועים, יש לספק שאלונים גדולים יותר כ-URI
.
אתם יכולים לעיין בקובץ questionnaire.json
אם רוצים, אבל אחד מהיתרונות של ספריית איסוף הנתונים המובְנים הוא שאין צורך לדעת איך מבנה השאלון FHIR (או כל דבר אחר על FHIR) כדי לקבל אותו כדי לעבד אותו. בהמשך תבדקו את הקובץ הזה בצורה מפורטת יותר ב-Codelab.
יוצרים QuestionnaireFragment
באמצעות ה-builder שלו ומגדירים את השאלון באמצעות הפונקציה setter. כדי להציג את 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. אתם אמורים לראות משהו כזה:
עוברים על השאלון ומנסים להזין כמה תשובות. נעשה שימוש בכמה ווידג'טים של תשובות, כולל בוליאני, טקסט ותאריכים, שעובדו באופן אוטומטי על סמך הסוג הבסיסי בשאלון 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 שמכילה לפחות משאב אחד שחולץ. במקרה הזה, משאב אחד של מטופל.
מריצים שוב את האפליקציה כדי לבנות אותה מחדש עם השינויים האחרונים. אחרי שהפרסום מתחיל, מזינים פרטים ומקישים על שליחה. ביומן אמורה להופיע הודעה 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