Acquisisci ed elabora i dati relativi allo stato di integrità con la libreria di acquisizione dei dati strutturati

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

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.

Schermata iniziale di Android Studio

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 (Pulsante Esegui) nella barra degli strumenti di Android Studio.

App Hello World

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 (Pulsante Sincronizzazione Gradle) 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.

  1. Apri activity_main.xml (res > layout > activity_main.xml).
  2. Le opzioni per le visualizzazioni Codice, Dividi e Struttura sono disponibili in alto a destra nell'Editor layout.
  3. Seleziona la Vista codice. Opzioni di visualizzazione Layout
  4. Non è necessario il TextView, quindi eliminalo. Assicurati di eliminare tutti i dati da <TextView alla chiusura />.
  5. Aggiungi un valore FragmentContainerView all'interno di ConstraintLayout. Il file activity_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 (Pulsante Esegui) nella barra degli strumenti di Android Studio. Il risultato dovrebbe essere simile a questo:

Questionario visualizzato nell&#39;emulatore

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 e ResourceMapper 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

Scopri di più