1. Prima di iniziare
Cosa creerai
In questo codelab imparerai a creare un'app per Android con la libreria di acquisizione di dati strutturati. L'app utilizzerà la libreria di acquisizione dei dati strutturati per eseguire il rendering ed elaborare i questionari e le risposte FHIR.
Obiettivi didattici
- Come integrare la libreria Structured Data Capture Library nella tua applicazione per Android
- Come visualizzare un questionario
- Come ricevere 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 di esempio
- 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 Android FHIR SDK: 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 di avvio in Android Studio.
Apri Android Studio, seleziona Importa progetto (Gradle, Eclipse ADT e così via) e scegli la cartella codelabs/datacapture
dal codice sorgente che hai scaricato in precedenza.
Esegui l'app di avvio
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 o avvia l'emulatore Android Studio e fai clic su Esegui () nella barra degli strumenti di Android Studio.
Come puoi vedere, non c'è ancora molto da fare, quindi iniziamo subito a visualizzare un questionario nella tua app.
3. Aggiungere la libreria di acquisizione dei dati strutturati al progetto
Aggiungi le dipendenze per la libreria di acquisizione dei dati strutturati
Le dipendenze della libreria Structured Data Capture ti consentono di integrare la libreria Structured Data Capture nella tua app. Aggiungi le seguenti righe alla fine del file app/build.gradle.kts
del 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 i 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 all'app iniziale la funzionalità per visualizzare un questionario in un FragmentContainerView
.
Durante la procedura, Android Studio ti chiederà di aggiungere le importazioni necessarie:
androidx.core.os.bundleOf
androidx.fragment.app.add
androidx.fragment.app.commit
android.util.Log
com.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). - Le opzioni per le viste Codice, Dividi e Progettazione si trovano in alto a destra nell'editor del layout.
- Seleziona la vista Codice.
- Non hai bisogno di
TextView
, quindi eliminalo. Assicurati di eliminare tutto da<TextView
a/>
di chiusura. - Aggiungi un
FragmentContainerView
all'interno diConstraintLayout
. Il fileactivity_main.xml
dovrebbe avere il seguente aspetto:<?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 essere visualizzato. Poiché il questionario è di piccole dimensioni (<512 KB), lo includerai come String
in un Bundle
di argomenti che verranno utilizzati per creare il frammento. 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 nulla 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 di impostazione. Per visualizzare il QuestionnaireFragment
all'interno del contenitore del layout, utilizza il 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'inizializzazione utilizzando questionnaireParams
creato in precedenza.
Aggiungi il codice seguente 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.
Esegui il codelab facendo clic su Esegui () nella barra degli strumenti di Android Studio. Dovresti visualizzare un messaggio simile al seguente:
Esplora il 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, è 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 ricevere una risposta al questionario.
5. Ricevere una risposta al questionario
Nei passaggi precedenti hai visualizzato un questionario FHIR nella tua app.
In questa sezione, riceverai le risposte al 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 oggetto HAPI FHIR QuestionnaireResponse
che puoi utilizzare direttamente o con altre parti dell'SDK Android FHIR. Questo codelab utilizza altre librerie HAPI FHIR per convertire il messaggio in una stringa JSON da visualizzare nel log.
Esegui di nuovo l'app per ricostruirla con le modifiche più recenti. Una volta avviato, 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. Estrarre risorse FHIR da una risposta al questionario
Il questionario incluso nel progetto iniziale è destinato a un semplice flusso di registrazione dei pazienti, pertanto potresti voler utilizzare le risposte al questionario per creare una risorsa FHIR Patient in base a queste. Questa conversione da una risposta al questionario alle 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 includere informazioni su come eseguire l'estrazione. Fortunatamente, il questionario di esempio è già configurato per l'estrazione basata su definizioni.
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 contenente una o più risorse estratte, in questo caso una singola risorsa Patient.
Esegui di nuovo l'app per ricostruirla con le modifiche più recenti. Una volta avviata, 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 libreria Structured Data Capture per elaborare questionari e risposte FHIR nella tua app:
- Visualizzare un questionario
- Ricevere una risposta al questionario
- Estrarre risorse FHIR da un
QuestionnaireResponse
È tutto ciò che ti serve per iniziare a utilizzare il servizio.
Man mano che procedi, potresti voler utilizzare le risorse FHIR in più modi all'interno dell'applicazione. Consulta la libreria FHIR Engine dell'SDK Android FHIR 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 raccolta di dati strutturati alla tua app per Android
- Come utilizzare
QuestionnaireFragment
eResourceMapper
per lavorare con i questionari FHIR
Passaggi successivi
- Esplora la documentazione della Structured Data Capture Library
- Personalizzare l'aspetto dei questionari visualizzati
- Applicare la libreria Structured Data Capture Library nella tua app per Android