1. Prima di iniziare
Che cosa creerai
In questo codelab imparerai a creare un'app per Android con la Structured Data Capture Library. L'app utilizzerà la Structured Data Capture Library per eseguire il rendering ed elaborare i questionari e le risposte FHIR.
Obiettivi didattici
- Come integrare la Structured Data Capture Library nella tua app per Android
- Come visualizzare un questionario
- Come ottenere le risposte come
QuestionnaireResponse - Come estrarre le risorse FHIR da un
QuestionnaireResponse
Che cosa ti serve
- Una versione recente di Android Studio (v4.1.2+)
- Emulatore Android o un dispositivo Android fisico
- Il codice campione
- Conoscenze di base dello sviluppo Android in Kotlin
Questo codelab è incentrato sulla Structured Data Capture Library. Concetti e blocchi di codice non pertinenti sono trattati solo superficialmente e sono forniti solo per operazioni di copia e incolla. Se non hai mai creato app Android, puoi iniziare creando la tua prima app.
2. Configurazione
Scarica il codice
Per scaricare il codice per questo codelab, clona il repository Android FHIR SDK: git clone https://github.com/ohs-foundation/android-fhir.git
Il progetto iniziale per questo codelab si trova in codelabs/datacapture.
Importa l'app in Android Studio
Iniziamo importando l'app di base in Android Studio.
Apri Android Studio, seleziona Import Project (Gradle, Eclipse ADT, etc.) e scegli la cartella codelabs/datacapture dal codice sorgente che hai scaricato in precedenza.

Esegui l'app di base
Ora che hai importato il progetto in Android Studio, puoi eseguire l'app per la prima volta.
Collega il dispositivo Android all'host tramite USB oppure avvia l'emulatore Android Studio, e fai clic su Esegui (
) nella barra degli strumenti di Android Studio.

Come puoi vedere, non c'è ancora molto, quindi passiamo subito alla visualizzazione di un questionario nella tua app.
3. Aggiungi la Structured Data Capture Library al progetto
Aggiungi le dipendenze per la Structured Data Capture Library
Le dipendenze della Structured Data Capture Library ti consentono di integrare la Structured Data Capture Library nella tua app. Aggiungi le seguenti righe alla fine del file app/build.gradle.kts del tuo progetto:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.2.0")
implementation("androidx.fragment:fragment-ktx:1.6.0")
}
Sincronizza il progetto con i file Gradle
Per assicurarti che tutte le dipendenze siano disponibili per la tua app, a questo punto devi sincronizzare il progetto con i file Gradle.
Seleziona Sync Project with Gradle Files (
) dalla barra degli strumenti di Android Studio. Puoi anche eseguire di nuovo l'app per verificare che le dipendenze funzionino correttamente.
4. Visualizza un questionario
In questo passaggio aggiungerai la funzionalità all'app di base per eseguire il rendering di un questionario in un FragmentContainerView.
Nel frattempo, Android Studio ti chiederà di aggiungere gli import necessari:
androidx.core.os.bundleOfandroidx.fragment.app.addandroidx.fragment.app.commitandroid.util.Logcom.google.android.fhir.datacapture.QuestionnaireFragment
Passaggio 1: aggiungi un FragmentContainerView
Aggiungi un FragmentContainerView al layout dell'applicazione. Qui verrà visualizzato il QuestionnaireFragment che creerai in un secondo momento.
- Apri
activity_main.xml(res > layout > activity_main.xml). - Trova le opzioni per le visualizzazioni Codice, Dividi e Progettazione in alto a destra nel Layout Editor.
- Seleziona la visualizzazione Codice.

- Non hai bisogno di
TextView, quindi eliminalo. Assicurati di eliminare tutto da<TextViewalla chiusura/>. - Aggiungi un
FragmentContainerViewall'interno diConstraintLayout. Il fileactivity_main.xmldovrebbe essere simile al seguente:<?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>
Passaggio 2: configura un QuestionnaireFragment
QuestionnaireFragment richiede un questionario FHIR codificato in JSON per il rendering. Poiché il questionario è piccolo (<512 KB), lo includerai come String in un Bundle di argomenti che verrà utilizzato per creare il fragment. Per motivi di prestazioni, i questionari più grandi devono essere forniti come URI.
Se vuoi, puoi esaminare il file questionnaire.json, ma uno dei vantaggi della Structured Data Capture Library è che non devi conoscere la struttura del questionario FHIR (o qualsiasi altra informazione su FHIR) per eseguirne il rendering. Esamineremo questo file più da vicino più avanti nel codelab.
Crea un QuestionnaireFragment utilizzando il relativo builder e imposta il questionario utilizzando la funzione setter. Per visualizzare il QuestionnaireFragment all'interno del contenitore del layout, utilizza FragmentManager per creare un FragmentTransaction.
Apri MainActivity.kt e aggiungi il seguente codice alla classe MainActivity:
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
Passaggio 3: aggiungi QuestionnaireFragment a FragmentContainerView
Per visualizzare il QuestionnaireFragment all'interno del contenitore del layout, utilizza FragmentManager per creare un FragmentTransaction. FragmentManager gestisce l'istanza utilizzando il questionnaireParams creato in precedenza.
Aggiungi il seguente codice alla classe MainActivity:
// 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()
}
Scopri di più su come utilizzare i fragment.
Esegui il codelab facendo clic su Esegui (
) nella barra degli strumenti di Android Studio. Dovresti vedere qualcosa di simile a questo:

Naviga nel questionario e prova a inserire alcune risposte. Sono stati utilizzati alcuni widget di risposta diversi, tra cui booleani, testo e date, che sono stati sottoposti automaticamente a rendering in base al tipo sottostante nel questionario FHIR originale.
Tecnicamente, questo è tutto ciò che devi fare per eseguire il rendering di un questionario. Complimenti!
Un questionario non è molto utile se non riesci a vedere le risposte inserite dagli utenti. Passiamo al passaggio successivo per ottenere una risposta al questionario.
5. Ottieni una risposta al questionario
Nei passaggi precedenti, hai eseguito il rendering di un questionario FHIR nella tua app.
In questa sezione, otterrai le risposte dal questionario come QuestionnaireResponse.
Trova il metodo submitQuestionnaire() e aggiungi il seguente codice:
// 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)
Per ottenere la risposta al questionario, recupera il fragment del questionario creato in precedenza, quindi utilizza il metodo getQuestionnaireResponse(). Questo restituisce un HAPI FHIR QuestionnaireResponse che puoi utilizzare direttamente o con altre parti dell'Android FHIR SDK. Questo codelab utilizza altre librerie HAPI FHIR per convertirlo in una stringa JSON da visualizzare nel log.
Esegui di nuovo l'app per ricompilarla con le ultime modifiche. Una volta in esecuzione, inserisci alcune informazioni nel questionario e tocca Invia. Nel log dovresti vedere un messaggio contenente QuestionnaireResponse in formato 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. Estrai le risorse FHIR da un QuestionnaireResponse
Il questionario incluso nel progetto iniziale è per un semplice flusso di registrazione del paziente, quindi potresti voler utilizzare le risposte del questionario per creare una risorsa Patient FHIR in base a queste. Questa conversione da una risposta al questionario a risorse FHIR è chiamata estrazione dei dati. Possiamo farlo con la classe ResourceMapper della Structured Data Capture Library.
Per eseguire l'estrazione dei dati, il questionario deve essere creato in modo da includere informazioni su come eseguire l'estrazione dei dati. Fortunatamente, il questionario di esempio è già configurato per l'estrazione basata sulla definizione.
Trova il metodo submitQuestionnaire() e aggiungi il seguente codice:
lifecycleScope.launch {
val questionnaire =
jsonParser.parseResource(questionnaireJsonString) as Questionnaire
val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}
ResourceMapper.extract() richiede un questionario HAPI FHIR, che puoi creare analizzando la stringa JSON del questionario precedente, e un QuestionnaireResponse, che abbiamo già ottenuto in precedenza. Restituisce un bundle di transazioni HAPI FHIR Bundle contenente una o più risorse estratte, in questo caso una singola risorsa Patient.
Esegui di nuovo l'app per ricompilarla con le ultime modifiche. Una volta in esecuzione, inserisci alcune informazioni e tocca Invia. Nel log dovresti ora vedere un messaggio extraction result contenente la rappresentazione JSON del bundle FHIR estratto.
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7. Complimenti!
Hai utilizzato la Structured Data Capture Library per elaborare i questionari e le risposte FHIR nella tua app:
- Visualizza un questionario
- Ottieni una risposta al questionario
- Estrai le risorse FHIR da un
QuestionnaireResponse
Questo è tutto ciò che ti serve per iniziare.
Man mano che procedi, potresti voler utilizzare le risorse FHIR in altri modi nella tua applicazione. Consulta la libreria FHIR Engine dell'Android FHIR SDK per scoprire come archiviare e gestire le risorse FHIR localmente nella tua applicazione e sincronizzare i dati con un server FHIR remoto.
Argomenti trattati
- Come aggiungere la Structured Data Capture Library alla tua app per Android
- Come utilizzare
QuestionnaireFragmenteResourceMapperper lavorare con i questionari FHIR
Passaggi successivi
- Esplora la documentazione della Structured Data Capture Library
- Personalizza l'aspetto dei questionari sottoposti a rendering
- Applica la Structured Data Capture Library nella tua app per Android