1. Prima di iniziare
Cosa creerai
In questo codelab, imparerai a creare un'app per Android con la libreria di acquisizione dei dati strutturati. L'app utilizzerà la libreria di acquisizione dei dati strutturati per visualizzare ed elaborare i questionari e le risposte FHIR.
Obiettivi didattici
- Come integrare la libreria di acquisizione dei dati strutturati nella tua applicazione per Android
- Come visualizzare un questionario
- Come ricevere risposte come
QuestionnaireResponse
- Come estrarre le risorse FHIR da un
QuestionnaireResponse
Che cosa ti serve
- Una versione recente di Android Studio (v4.1.2 o versioni successive).
- Emulatore Android 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 sviluppato app Android, puoi iniziare creando la tua prima app.
2. Configurazione
Scarica il codice
Per scaricare il codice per questo codelab, clona il repository dell'SDK FHIR per Android: 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
Inizia importando l'app iniziale in Android Studio.
Apri Android Studio, seleziona Import Project (Gradle, Eclipse ADT ecc.) e scegli la cartella codelabs/datacapture
dal codice sorgente che hai scaricato in precedenza.
Esegui l'app iniziale
Ora che hai importato il progetto in Android Studio, puoi eseguire l'app per la prima volta.
Collega il dispositivo Android tramite USB al tuo host 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 qui, quindi iniziamo a visualizzare un questionario nella tua app.
3. Aggiungi 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 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.0.0")
implementation("androidx.fragment:fragment-ktx:1.5.5")
}
Sincronizza il tuo 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. Esegui di nuovo l'app per verificare che le dipendenze funzionino correttamente.
4. Visualizza un questionario
In questo passaggio aggiungerai all'app iniziale la funzionalità per eseguire il rendering di un questionario in un FragmentContainerView
.
Durante l'operazione, 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 che verrà visualizzato l'elemento QuestionnaireFragment
che creerai in seguito.
- Apri
activity_main.xml
(res > layout > activity_main.xml). - Le opzioni per le visualizzazioni Codice, Dividi e Struttura sono disponibili in alto a destra nell'Editor layout.
- Seleziona la Vista codice.
- Non è necessario il
TextView
, quindi eliminalo. Assicurati di eliminare tutti i dati da<TextView
alla chiusura/>
. - Aggiungi un valore
FragmentContainerView
all'interno diConstraintLayout
. Il fileactivity_main.xml
dovrebbe avere un aspetto 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: aggiungi un QuestionnaireFragment
al FragmentContainerView
QuestionnaireFragment
richiede un questionario FHIR con codifica JSON per il rendering. 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 legati alle prestazioni, è consigliabile fornire questionari più grandi come URI
.
Se vuoi, puoi esaminare il file questionnaire.json
, ma uno dei vantaggi della libreria di acquisizione dei dati strutturati è che non è necessario conoscere la struttura del questionario FHIR (o qualsiasi cosa su FHIR) per eseguirne il rendering. Più avanti nel codelab analizzerai meglio questo file.
Crea un QuestionnaireFragment
mediante il relativo builder e imposta il questionario usando la funzione setter. Per visualizzare QuestionnaireFragment
all'interno del contenitore di 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")
if (savedInstanceState == null) {
supportFragmentManager.commit {
setReorderingAllowed(true)
add(
R.id.fragment_container_view,
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
)
}
}
Scopri di più su come utilizzare i frammenti.
Eseguiamo il codelab facendo clic su Esegui () nella barra degli strumenti di Android Studio. Il risultato dovrebbe essere simile a questo:
Scorri il questionario e prova a inserire alcune risposte. Sono stati utilizzati diversi widget di risposta, tra cui valori booleani, testo e date, il cui rendering è stato eseguito automaticamente in base al tipo sottostante nel questionario FHIR originale.
Tecnicamente, questo è tutto ciò che devi fare per eseguire il rendering di un questionario. Complimenti!
Il 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 del questionario sotto forma di 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 del questionario, recupera il frammento del questionario creato in precedenza, quindi utilizza il metodo getQuestionnaireResponse()
. Questo restituisce un valore FHIR QuestionnaireResponse
HAPI che puoi utilizzare direttamente o con altre parti dell'SDK FHIR per Android. Questo codelab utilizza altre librerie FHIR HAPI per convertirlo in una stringa JSON da visualizzare nel log.
Esegui di nuovo l'app per ricrearla con le ultime modifiche. Quando è in esecuzione, inserisci alcune informazioni nel questionario e tocca Invia. Nel log dovresti vedere un messaggio contenente il valore 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 un QuestionnaireResponse
Il questionario incluso nel progetto iniziale serve a semplificare il flusso di registrazione dei pazienti, quindi potresti voler utilizzare le risposte del questionario per creare una risorsa per i pazienti FHIR basata su queste. Questa conversione da una risposta di un 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à impostato 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 FHIR HAPI, che puoi creare analizzando la stringa JSON del questionario da prima, e un QuestionnaireResponse
, che abbiamo già creato in precedenza. Restituisce un Bundle di transazioni FHIR HAPI contenente una o più risorse estratte, in questo caso una singola risorsa Patient.
Esegui di nuovo l'app per ricrearla con le ultime modifiche. Quando è in esecuzione, inserisci alcune informazioni e tocca Invia. Nel log ora dovresti 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 di acquisizione dei dati strutturati per elaborare i questionari e le risposte FHIR nella tua app:
- Visualizza un questionario
- Ricevere una risposta al questionario
- Estrai risorse FHIR da un
QuestionnaireResponse
Questo è tutto ciò che ti serve per renderlo operativo.
Man mano che procedi, potrebbe essere utile lavorare con le risorse FHIR in più modi nella tua applicazione. Consulta la libreria FHIR Engine dell'SDK FHIR per Android 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
QuestionnaireFragment
eResourceMapper
per lavorare con i questionari FHIR
Passaggi successivi
- Esplora la documentazione della libreria di acquisizione dei dati strutturati
- Personalizza l'aspetto dei questionari visualizzati
- Applicare la libreria di acquisizione dei dati strutturati alla propria app per Android