1. Hinweis
Aufgaben
In diesem Codelab erfahren Sie, wie Sie eine Android-App mit der Structured Data Capture Library erstellen. Ihre App verwendet die Structured Data Capture Library zum Rendern und Verarbeiten von FHIR-Fragebögen und -Antworten.
Lerninhalte
- Strukturierte Datenerfassungsbibliothek in Android-Apps integrieren
- So blenden Sie einen Fragebogen ein:
- Antworten als
QuestionnaireResponse
erhalten - FHIR-Ressourcen aus einem
QuestionnaireResponse
extrahieren
Voraussetzungen
- Eine aktuelle Version von Android Studio (ab Version 4.1.2)
- Android-Emulator oder ein physisches Android-Gerät
- Der Beispielcode
- Grundkenntnisse der Android-Entwicklung in Kotlin
In diesem Codelab geht es um die Aufnahmebibliothek für strukturierte Daten. Auf irrelevante Konzepte wird nicht genauer eingegangen und entsprechende Codeblöcke können Sie einfach kopieren und einfügen. Wenn Sie noch keine Android-Apps entwickelt haben, können Sie damit beginnen, Ihre erste App zu erstellen.
2. Einrichten
Code herunterladen
Klonen Sie das Android FHIR SDK-Repository, um den Code für dieses Codelab herunterzuladen: git clone https://github.com/google/android-fhir.git
Das Startprojekt für dieses Codelab befindet sich in codelabs/datacapture
.
App in Android Studio importieren
Importieren wir zuerst die Starter-App in Android Studio.
Öffnen Sie Android Studio, wählen Sie Projekt importieren (Gradle, Eclipse ADT usw.) und dann den Ordner codelabs/datacapture
aus dem Quellcode aus, den Sie zuvor heruntergeladen haben.
Start-App ausführen
Nachdem Sie das Projekt in Android Studio importiert haben, können Sie die App zum ersten Mal ausführen.
Verbinden Sie Ihr Android-Gerät über USB mit Ihrem Host oder starten Sie den Android Studio-Emulator und klicken Sie in der Android Studio-Symbolleiste auf „Ausführen“ ().
Wie Sie sehen, gibt es hier noch nicht viel. Lassen Sie uns also gleich damit beginnen, einen Fragebogen in Ihrer App anzuzeigen!
3. Dem Projekt eine Bibliothek für die strukturierte Datenerfassung hinzufügen
Abhängigkeiten für die Structured Data Capture Library hinzufügen
Die Abhängigkeiten der Structured Data Capture Library ermöglichen es Ihnen, die Structured Data Capture Library in Ihre App zu integrieren. Fügen Sie am Ende der Datei app/build.gradle.kts
Ihres Projekts die folgenden Zeilen hinzu:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.0.0")
implementation("androidx.fragment:fragment-ktx:1.5.5")
}
Projekt mit Gradle-Dateien synchronisieren
Damit alle Abhängigkeiten für Ihre App verfügbar sind, sollten Sie Ihr Projekt jetzt mit Gradle-Dateien synchronisieren.
Wählen Sie in der Android Studio-Symbolleiste Sync Project with Gradle Files () aus. Außerdem führen Sie die Anwendung noch einmal aus, um zu prüfen, ob die Abhängigkeiten korrekt funktionieren.
4. Fragebogen anzeigen
In diesem Schritt fügen Sie der Starter-App die Funktion hinzu, mit der Sie einen Fragebogen in einem FragmentContainerView
rendern können.
Android Studio fordert Sie dann auf, die erforderlichen Importe hinzuzufügen:
androidx.core.os.bundleOf
androidx.fragment.app.add
androidx.fragment.app.commit
android.util.Log
com.google.android.fhir.datacapture.QuestionnaireFragment
Schritt 1: FragmentContainerView
hinzufügen
Fügen Sie dem Layout der Anwendung eine FragmentContainerView
hinzu. Hier wird der QuestionnaireFragment
angezeigt, den Sie später erstellen.
- Öffnen Sie
activity_main.xml
(res > Layout > activity_main.xml). - Die Optionen für die Code-, Aufteilung- und Designansichten finden Sie oben rechts im Layout-Editor.
- Wählen Sie die Codeansicht aus.
- Du brauchst die Datei
TextView
nicht, also lösche sie. Achte darauf, alles vom<TextView
bis zum schließenden/>
zu löschen. - Fügen Sie ein
FragmentContainerView
-Element inConstraintLayout
ein. Die Dateiactivity_main.xml
sollte in etwa so aussehen:<?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>
Schritt 2: Der FragmentContainerView
einen QuestionnaireFragment
hinzufügen
Zum Rendern von QuestionnaireFragment
ist ein JSON-codierter FHIR-Fragebogen erforderlich. Da der Fragebogen klein ist (<512 KB), fügen Sie ihn als String
in eine Bundle
von Argumenten ein, die zum Erstellen des Fragments verwendet werden. Größere Fragebögen sollten aus Leistungsgründen als URI
angegeben werden.
Sie können sich die Datei questionnaire.json
ansehen, wenn Sie möchten, aber einer der Vorteile der Structured Data Capture Library besteht darin, dass Sie die Struktur des FHIR-Fragebogens (oder etwas über FHIR) nicht kennen müssen, um ihn rendern zu können. Sie sehen sich diese Datei später im Codelab genauer an.
Erstelle mit dem Builder eine QuestionnaireFragment
und lege den Fragebogen mithilfe der Setter-Funktion fest. Zum Anzeigen von QuestionnaireFragment
innerhalb des Layoutcontainers verwenden Sie FragmentManager
, um eine FragmentTransaction
zu erstellen.
Öffnen Sie MainActivity.kt
und fügen Sie der Klasse MainActivity
den folgenden Code hinzu:
// 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()
)
}
}
Weitere Informationen zur Verwendung von Fragmenten
Führen Sie das Codelab aus, indem Sie in der Android Studio-Symbolleiste auf „Run“ () klicken. Die Ausgabe sollte etwa so aussehen:
Gehen Sie den Fragebogen durch und geben Sie einige Antworten ein. Es werden verschiedene Antwort-Widgets verwendet, darunter boolesche Werte, Text und Datumsangaben, die basierend auf dem zugrunde liegenden Typ im ursprünglichen FHIR-Fragebogen automatisch gerendert wurden.
Technisch gesehen ist das alles, was Sie tun müssen, um einen Fragebogen zu erstellen. Glückwunsch!
Ein Fragebogen ist nicht sehr hilfreich, wenn Sie die Antworten der Nutzenden nicht sehen können. Fahren wir mit dem nächsten Schritt fort, um eine Fragebogenantwort zu erhalten.
5. Antwort auf den Fragebogen erhalten
In den vorherigen Schritten haben Sie einen FHIR-Fragebogen in Ihrer App gerendert.
In diesem Abschnitt erhalten Sie die Antworten aus dem Fragebogen als Fragebogenantwort.
Suchen Sie die Methode submitQuestionnaire()
und fügen Sie den folgenden Code hinzu:
// 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)
Um die Antworten im Fragebogen zu erhalten, rufen Sie das zuvor erstellte Fragebogenfragment ab und verwenden dann die Methode getQuestionnaireResponse()
. Dadurch wird ein HAPI FHIR QuestionnaireResponse
zurückgegeben, das Sie direkt oder mit anderen Teilen des Android FHIR SDK verwenden können. Dieses Codelab verwendet andere HAPI FHIR-Bibliotheken, um ihn in einen JSON-String zu konvertieren und im Log anzusehen.
Führen Sie die App noch einmal aus, um sie mit den letzten Änderungen neu zu erstellen. Geben Sie nach dem Start einige Informationen in den Fragebogen ein und tippen Sie auf Senden. Im Log sollte eine Nachricht mit QuestionnaireResponse
im JSON-Format angezeigt werden.
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-Ressourcen aus einer QuestionnaireResponse
Der im Startprojekt enthaltene Fragebogen dient einem einfachen Ablauf der Patientenregistrierung. Daher können Sie die Antworten des Fragebogens verwenden, um eine darauf basierende FHIR-Patientenressource zu erstellen. Diese Umwandlung von Fragebogenantworten in FHIR-Ressourcen wird als Datenextraktion bezeichnet. Hierzu können Sie die Klasse ResourceMapper
der Bibliothek zur Erfassung strukturierter Daten verwenden.
Damit Sie Daten extrahieren können, muss Ihr Fragebogen Informationen zur Durchführung der Datenextraktion enthalten. Glücklicherweise ist der Stichprobenfragebogen bereits für die definitionsbasierte Extraktion eingerichtet.
Suchen Sie die Methode submitQuestionnaire()
und fügen Sie den folgenden Code hinzu:
lifecycleScope.launch {
val questionnaire =
jsonParser.parseResource(questionnaireJsonString) as Questionnaire
val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}
ResourceMapper.extract()
erfordert einen HAPI-FHIR-Fragebogen, den Sie durch Parsen des zuvor verwendeten JSON-Strings des Fragebogens erstellen können, sowie einen QuestionnaireResponse
, den wir bereits erhalten haben. Sie gibt ein HAPI FHIR-Transaktions-Bundle zurück, das eine oder mehrere extrahierte Ressourcen enthält – in diesem Fall eine einzelne Patientenressource.
Führen Sie die App noch einmal aus, um sie mit den letzten Änderungen neu zu erstellen. Sobald er ausgeführt wird, geben Sie einige Informationen ein und tippen Sie auf Senden. Im Log sollte jetzt die Meldung extraction result
angezeigt werden, die die JSON-Darstellung des extrahierten FHIR-Bundles enthält.
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7. Glückwunsch!
Sie haben die Structured Data Capture Library verwendet, um FHIR-Fragebögen und -Antworten in Ihrer App zu verarbeiten:
- Fragebogen anzeigen
- Antwort auf den Fragebogen erhalten
- FHIR-Ressourcen aus einem
QuestionnaireResponse
extrahieren
Das ist alles, was Sie brauchen, um loszulegen.
Im weiteren Verlauf möchten Sie möglicherweise in Ihrer gesamten Anwendung auf verschiedene Arten mit FHIR-Ressourcen arbeiten. Sehen Sie sich die FHIR-Engine-Bibliothek des Android FHIR SDK an, um zu erfahren, wie Sie FHIR-Ressourcen lokal in Ihrer Anwendung speichern und verwalten und Daten mit einem Remote-FHIR-Server synchronisieren.
Behandelte Themen
- So fügen Sie Ihrer Android-App eine Bibliothek für die strukturierte Datenerfassung hinzu
- So verwenden Sie
QuestionnaireFragment
undResourceMapper
für die Arbeit mit FHIR-Fragebögen
Nächste Schritte
- Dokumentation zur Structured Data Capture Library ansehen
- Design gerenderter Fragebögen anpassen
- Strukturierte Datenerfassungsbibliothek in Ihrer eigenen Android-App anwenden