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, um FHIR-Fragebögen und ‑Antworten zu rendern und zu verarbeiten.
Lerninhalte
- So integrieren Sie die Structured Data Capture Library in Ihre Android-Anwendung
- Fragebogen anzeigen
- Antworten als
QuestionnaireResponseerhalten - FHIR-Ressourcen aus einem
QuestionnaireResponseextrahieren
Voraussetzungen
- Eine aktuelle Version von Android Studio (ab Version 4.1.2)
- Android-Emulator oder physisches Android-Gerät
- Der Beispielcode
- Grundkenntnisse der Android-Entwicklung in Kotlin
In diesem Codelab geht es um die Structured Data Capture Library. 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 Ihre erste App erstellen.
2. Einrichten
Code herunterladen
Wenn Sie den Code für dieses Codelab herunterladen möchten, klonen Sie das Android FHIR SDK-Repository: git clone https://github.com/google/android-fhir.git
Das Starterprojekt 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 Import Project (Gradle, Eclipse ADT, etc.) (Projekt importieren (Gradle, Eclipse ADT usw.)) aus und wählen Sie 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, kann die App zum ersten Mal ausgeführt werden.
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. Bibliothek für strukturierte Daten zum Projekt hinzufügen
Abhängigkeiten für die Structured Data Capture Library hinzufügen
Mit den Abhängigkeiten der Structured Data Capture Library können Sie die Structured Data Capture Library in Ihre App einbinden. Fügen Sie die folgenden Zeilen am Ende der Datei app/build.gradle.kts Ihres Projekts hinzu:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.2.0")
implementation("androidx.fragment:fragment-ktx:1.6.0")
}
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. Sie können die App auch noch einmal ausführen, um zu prüfen, ob die Abhängigkeiten richtig funktionieren.
4. Fragebogen anzeigen
In diesem Schritt fügen Sie der Starter-App die Funktion hinzu, einen Fragebogen in einem FragmentContainerView zu rendern.
Android Studio fordert Sie dann auf, die erforderlichen Importe hinzuzufügen:
androidx.core.os.bundleOfandroidx.fragment.app.addandroidx.fragment.app.commitandroid.util.Logcom.google.android.fhir.datacapture.QuestionnaireFragment
Schritt 1: FragmentContainerView hinzufügen
Fügen Sie dem Layout der Anwendung ein FragmentContainerView hinzu. Hier wird die QuestionnaireFragment angezeigt, die Sie später erstellen.
- Öffnen Sie
activity_main.xml(res > layout > activity_main.xml). - Die Optionen für die Code-, Split- und Designansicht finden Sie rechts oben im Layout-Editor.
- Wählen Sie die Codeansicht aus.

- Sie benötigen die Datei
TextViewnicht mehr. Löschen Sie sie. Löschen Sie alles vom öffnenden<TextViewbis zum schließenden/>. - Fügen Sie ein
FragmentContainerViewinConstraintLayoutein. Ihreactivity_main.xml-Datei 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: QuestionnaireFragment konfigurieren
Für die Darstellung von QuestionnaireFragment ist ein JSON-codierter FHIR-Fragebogen erforderlich. Da der Fragebogen klein ist (<512 KB), fügen Sie ihn als String in ein Bundle von Argumenten ein, die zum Erstellen des Fragments verwendet werden. Größere Fragebögen sollten aus Leistungsgründen als URI bereitgestellt werden.
Sie können sich die questionnaire.json-Datei ansehen, wenn Sie möchten. Einer der Vorteile der Structured Data Capture Library besteht jedoch darin, dass Sie die Struktur des FHIR-Fragebogens (oder irgendetwas über FHIR) nicht kennen müssen, damit er gerendert wird. Sie sehen sich diese Datei später im Codelab genauer an.
Erstellen Sie ein QuestionnaireFragment mit dem Builder und legen Sie den Fragebogen mit der Setter-Funktion fest. Um das QuestionnaireFragment im Layout-Container anzuzeigen, verwenden Sie FragmentManager, um ein 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")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
Schritt 3: QuestionnaireFragment dem FragmentContainerView hinzufügen
Um das QuestionnaireFragment im Layout-Container anzuzeigen, verwenden Sie FragmentManager, um ein FragmentTransaction zu erstellen. Die FragmentManager übernimmt die Instanziierung mit der zuvor erstellten questionnaireParams.
Fügen Sie der MainActivity-Klasse den folgenden Code hinzu:
// 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()
}
Weitere Informationen zur Verwendung von Fragmenten
Klicken Sie in der Android Studio-Symbolleiste auf „Ausführen“ (
), um das Codelab auszuführen. Die Ausgabe sollte etwa so aussehen:

Klicken Sie sich durch den Fragebogen und versuchen Sie, einige Antworten einzugeben. Es werden verschiedene Antwort-Widgets verwendet, darunter boolesche Werte, Text und Datumsangaben, die automatisch basierend auf dem zugrunde liegenden Typ im ursprünglichen FHIR-Fragebogen gerendert wurden.
Technisch gesehen ist das alles, was Sie tun müssen, um einen Fragebogen zu rendern. Glückwunsch!
Ein Fragebogen ist jedoch nicht sehr hilfreich, wenn Sie die Antworten der Nutzer nicht sehen können. Kommen wir zum nächsten Schritt, um eine Fragebogenantwort zu erhalten.
5. Antwort auf 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 QuestionnaireResponse.
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 Fragebogenantwort 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. In diesem Codelab werden andere HAPI FHIR-Bibliotheken verwendet, um die Daten in einen JSON-String zu konvertieren, der im Log angezeigt werden kann.
Führen Sie die App noch einmal aus, um sie mit den neuesten Änderungen neu zu erstellen. Geben Sie einige Informationen in den Fragebogen ein und tippen Sie auf Senden. Im Log sollte eine Meldung mit der QuestionnaireResponse als JSON 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 extrahieren
Der im Starterprojekt enthaltene Fragebogen ist für einen einfachen Patientenregistrierungsablauf vorgesehen. Möglicherweise möchten Sie die Antworten auf den Fragebogen verwenden, um eine FHIR-Patientenressource zu erstellen. Diese Umwandlung einer Fragebogenantwort in FHIR-Ressourcen wird als Datenextraktion bezeichnet. Dazu können wir die ResourceMapper-Klasse der Structured Data Capture Library verwenden.
Damit die Daten extrahiert werden können, muss Ihr Fragebogen Informationen dazu enthalten, wie die Datenextraktion durchgeführt werden soll. Glücklicherweise ist der Beispielfragebogen bereits für die definitionbasierte 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))
}
Für ResourceMapper.extract() ist ein HAPI FHIR-Fragebogen erforderlich, den Sie erstellen können, indem Sie den JSON-String des Fragebogens aus dem vorherigen Schritt parsen, sowie ein QuestionnaireResponse, das wir bereits erhalten haben. Es wird ein HAPI FHIR-Transaktions-Bundle mit einer oder mehreren extrahierten Ressourcen zurückgegeben, in diesem Fall eine einzelne Patientenressource.
Führen Sie die App noch einmal aus, um sie mit den neuesten Änderungen neu zu erstellen. Wenn die App ausgeführt wird, geben Sie einige Informationen ein und tippen Sie auf Senden. Im Log sollte jetzt eine Meldung extraction result mit der JSON-Darstellung des extrahierten FHIR-Bundles angezeigt werden.
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 Fragebogen erhalten
- FHIR-Ressourcen aus einem
QuestionnaireResponseextrahieren
Das ist alles, was Sie für die Einrichtung benötigen.
Im weiteren Verlauf möchten Sie möglicherweise FHIR-Ressourcen in Ihrer Anwendung auf verschiedene Arten verwenden. In der FHIR Engine Library des Android FHIR SDK erfahren Sie, 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 die Structured Data Capture Library hinzu
QuestionnaireFragmentundResourceMapperzum Arbeiten mit FHIR-Fragebögen verwenden
Nächste Schritte
- Dokumentation zur Structured Data Capture Library
- Darstellung gerenderter Fragebögen anpassen
- Structured Data Capture Library in Ihrer eigenen Android-App verwenden