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
- Structured Data Capture Library in Ihre Android-Anwendung einbinden
- Fragebogen anzeigen
- Antworten als
QuestionnaireResponse
erhalten - FHIR-Ressourcen aus einer
QuestionnaireResponse
extrahieren
Voraussetzungen
- Eine aktuelle Version von Android Studio (Version 4.1.2 oder höher)
- Android-Emulator oder ein physisches Android-Gerät
- Der Beispielcode
- Grundkenntnisse in der Android-Entwicklung mit 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 mit dem Erstellen Ihrer ersten App beginnen.
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 unter codelabs/datacapture
.
App in Android Studio importieren
Importieren Sie 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 zuvor heruntergeladenen Quellcode aus.
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 zu sehen. Beginnen wir also gleich damit, einen Fragebogen in Ihrer App anzuzeigen.
3. Strukturierte Datenerfassungsbibliothek zum Projekt hinzufügen
Abhängigkeiten für die Bibliothek zum Erfassen strukturierter Daten 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 app/build.gradle.kts
-Datei 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 den Gradle-Dateien synchronisieren.
Wählen Sie in der Android Studio-Symbolleiste Projekt mit Gradle-Dateien synchronisieren () aus. Sie können die App auch noch einmal ausführen, um zu prüfen, ob die Abhängigkeiten ordnungsgemäß funktionieren.
4. Fragebogen anzeigen
In diesem Schritt fügen Sie der Starter-App die Funktion hinzu, mit der ein Fragebogen in einem FragmentContainerView
gerendert wird.
Während des Vorgangs werden Sie von Android Studio aufgefordert, 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 ein FragmentContainerView
hinzu. Hier wird später die QuestionnaireFragment
angezeigt, die Sie erstellen.
- Öffnen Sie
activity_main.xml
(res > layout > activity_main.xml). - Die Optionen für die Code-, Splitscreen- und Designansicht finden Sie rechts oben im Layout-Editor.
- Wählen Sie die Codeansicht aus.
- Sie benötigen die
TextView
nicht. Löschen Sie sie daher. Löschen Sie alles zwischen dem<TextView
und dem abschließenden/>
. - Fügen Sie ein
FragmentContainerView
in dasConstraintLayout
ein. 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 eine 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 ist jedoch, dass Sie die Struktur des FHIR-Fragebogens (oder irgendetwas über FHIR) nicht kennen müssen, um ihn zu rendern. Sie werden sich diese Datei später im Codelab genauer ansehen.
Erstellen Sie eine QuestionnaireFragment
mit dem Builder und legen Sie den Fragebogen mit der Setzerfunktion fest. Wenn Sie die QuestionnaireFragment
im Layoutcontainer anzeigen möchten, erstellen Sie mit dem FragmentManager
ein FragmentTransaction
.
Ö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 zur FragmentContainerView hinzufügen
Wenn Sie die QuestionnaireFragment
im Layoutcontainer anzeigen möchten, erstellen Sie mit dem FragmentManager
eine FragmentTransaction
. Der FragmentManager
führt die Instanziierung mithilfe des zuvor erstellten questionnaireParams
durch.
Fügen Sie der Klasse MainActivity
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
Führen Sie das Codelab aus, indem Sie in der Android Studio-Symbolleiste auf „Ausführen“ () klicken. Die Ausgabe sollte etwa so aussehen:
Gehen Sie 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 zum Rendern eines Fragebogens tun müssen. Glückwunsch!
Ein Fragebogen ist jedoch nicht sehr hilfreich, wenn Sie die Antworten der Nutzer nicht sehen können. Fahren wir mit dem nächsten Schritt fort, um eine Antwort auf den Fragebogen zu erhalten.
5. Antworten auf Fragebögen abrufen
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 Antwort des Fragebogens abzurufen, rufen Sie das zuvor erstellte Fragebogenfragment ab und verwenden Sie dann die Methode getQuestionnaireResponse()
. Dadurch wird eine HAPI FHIR-Ressource QuestionnaireResponse
zurückgegeben, die 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 Protokoll angezeigt wird.
Führen Sie die App noch einmal aus, um sie mit Ihren letzten Änderungen neu zu erstellen. Geben Sie dann einige Informationen in den Fragebogen ein und tippen Sie auf Senden. Im Log sollte eine Meldung mit der QuestionnaireResponse
als JSON-Objekt 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 dient einem einfachen Ablauf für die Patientenregistrierung. Sie können die Antworten auf den Fragebogen also verwenden, um eine FHIR-Patientenressource zu erstellen. Diese Umwandlung von einer Fragebogenantwort in FHIR-Ressourcen wird als Datenextraktion bezeichnet. Das können wir mit der ResourceMapper
-Klasse der Structured Data Capture Library tun.
Damit die Datenextraktion durchgeführt werden kann, muss Ihr Fragebogen Informationen zur Durchführung der Datenextraktion enthalten. Glücklicherweise ist der Beispielfragebogen bereits für die definitionsgemäße 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. Außerdem ist ein QuestionnaireResponse
erforderlich, den wir bereits haben. Es 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 Ihren letzten Änderungen neu zu erstellen. Geben Sie dann einige Informationen ein und tippen Sie auf Senden. Im Log sollte jetzt die 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
- Antworten auf Fragebögen abrufen
- FHIR-Ressourcen aus einer
QuestionnaireResponse
extrahieren
Das ist alles, was du brauchst, um loszulegen.
Im weiteren Verlauf möchten Sie möglicherweise in Ihrer Anwendung auf verschiedene Arten mit FHIR-Ressourcen arbeiten. 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
- Structured Data Capture Library zur Android-App hinzufügen
QuestionnaireFragment
undResourceMapper
für die Arbeit mit FHIR-Fragebögen verwenden
Nächste Schritte
- Dokumentation zur Structured Data Capture Library
- Erscheinungsbild gerenderter Fragebögen anpassen
- Structured Data Capture Library in Ihrer eigenen Android-App anwenden