1. Prima di iniziare
Cosa creerai
In questo codelab, imparerai a creare un'app per Android con la libreria Structured Data Capture. La tua app utilizzerà la libreria Structured Data Capture per eseguire il rendering ed elaborare i questionari e le risposte FHIR.
Obiettivi didattici
- Come integrare la libreria Structured Data Capture nella tua applicazione Android
- Come visualizzare un questionario
- Come ottenere risposte in qualità di
QuestionnaireResponse - Come estrarre le risorse FHIR da un
QuestionnaireResponse
Che cosa ti serve
- Una versione recente di Android Studio (v4.1.2+)
- Android Emulator o un dispositivo Android fisico
- Il codice campione
- Conoscenza di base dello sviluppo Android in Kotlin
Questo codelab è incentrato sulla libreria di acquisizione dei dati strutturati. 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 per Android, puoi iniziare creando la tua prima app.
2. Configurazione
Scarica il codice
Per scaricare il codice di questo codelab, clona il repository dell'SDK Android FHIR: git clone https://github.com/google/android-fhir.git
Il progetto iniziale per questo codelab si trova in codelabs/datacapture.
Importa l'app in Android Studio
Iniziamo importando l'app iniziale in Android Studio.
Apri Android Studio, seleziona Import Project (Gradle, Eclipse ADT, etc.) e scegli la cartella codelabs/datacapture del 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 tuo dispositivo Android tramite USB all'host o avvia l'emulatore Android Studio e fai clic su Esegui (
) nella barra degli strumenti di Android Studio.

Come puoi vedere, qui non c'è ancora molto, quindi passiamo subito alla visualizzazione di un questionario nella tua app.
3. Aggiungere la libreria di acquisizione dei dati strutturati al progetto
Aggiungere le dipendenze per la libreria di acquisizione dei dati strutturati
Le dipendenze della libreria di acquisizione dei dati strutturati ti consentono di integrare la libreria di acquisizione dei dati strutturati 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")
}
Sincronizzare 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 Sincronizza progetto con file Gradle (
) dalla barra degli strumenti di Android Studio. Puoi anche eseguire di nuovo l'app per verificare che le dipendenze funzionino correttamente.
4. Visualizzare un questionario
In questo passaggio, aggiungerai alla starter app la funzionalità per visualizzare un questionario in un FragmentContainerView.
Durante la procedura, Android Studio ti chiederà di aggiungere le importazioni necessarie:
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 verranno visualizzati i QuestionnaireFragment che creerai in un secondo momento.
- Apri
activity_main.xml(res > layout > activity_main.xml). - Trova le opzioni per le visualizzazioni Codice, Divisione e Struttura in alto a destra nell'editor del layout.
- Seleziona la Vista codice.

- Non hai bisogno di
TextView, quindi eliminalo. Assicurati di eliminare tutto da<TextViewa/>. - Aggiungi un
FragmentContainerViewall'interno diConstraintLayout. Il fileactivity_main.xmldovrebbe essere simile a questo:<?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 con codifica JSON per il rendering. Poiché il questionario è piccolo (< 512 KB), lo includerai come String in un Bundle di argomenti che verranno utilizzati per creare il fragmento. Per motivi di rendimento, i questionari più grandi devono essere forniti come URI.
Se vuoi, puoi esaminare il file questionnaire.json, ma uno dei vantaggi della libreria di acquisizione dei dati strutturati è che non devi conoscere la struttura del questionario FHIR (o qualsiasi informazione su FHIR) per visualizzarlo. Esaminerai più da vicino questo file più avanti nel codelab.
Crea un QuestionnaireFragment utilizzando il relativo builder e imposta il questionario utilizzando la funzione setter. Per visualizzare 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 QuestionnaireFragment all'interno del contenitore del layout, utilizza FragmentManager per creare un FragmentTransaction. FragmentManager gestisce l'istanza utilizzando 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 frammenti.
Eseguiamo 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. Vengono utilizzati diversi widget di risposta, tra cui booleani, testo e date, che sono stati visualizzati automaticamente in base al tipo sottostante nel questionario FHIR originale.
Tecnicamente, questo è tutto ciò che devi fare per visualizzare 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, riceverai le risposte del 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 frammento del questionario creato in precedenza e utilizza il metodo getQuestionnaireResponse(). Viene restituito un QuestionnaireResponse HAPI FHIR che puoi utilizzare direttamente o con altre parti dell'SDK Android FHIR. 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 visualizzare 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 risorse FHIR da una QuestionnaireResponse
Il questionario incluso nel progetto iniziale è per un semplice flusso di registrazione del paziente, quindi alla fine potresti voler utilizzare le risposte al questionario per creare una risorsa FHIR Patient 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 libreria di acquisizione dei dati strutturati.
Per eseguire l'estrazione dei dati, il questionario deve essere creato in modo da includere informazioni su come eseguire l'estrazione. 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 transazione HAPI FHIR 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 visualizzare 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 libreria Structured Data Capture per elaborare questionari e risposte FHIR nella tua app:
- Visualizzare un questionario
- Ottieni una risposta al questionario
- Estrai risorse FHIR da un
QuestionnaireResponse
Questo è tutto ciò che ti serve per iniziare.
Man mano che procedi, potresti voler utilizzare le risorse FHIR in più 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 libreria di acquisizione dei dati strutturati alla tua app per Android
- Come utilizzare
QuestionnaireFragmenteResourceMapperper lavorare con i questionari FHIR
Passaggi successivi
- Esplora la documentazione della libreria Structured Data Capture
- Personalizzare l'aspetto dei questionari sottoposti a rendering
- Applica la libreria Structured Data Capture nella tua app per Android