1. Antes de começar
O que você vai criar
Neste codelab, você aprenderá a criar um app Android com a biblioteca de captura de dados estruturados. Seu app usará a biblioteca de captura de dados estruturados para renderizar e processar questionários e respostas FHIR.
O que você vai aprender
- Como integrar a biblioteca de captura de dados estruturados ao seu app Android
- Como exibir um questionário
- Como receber respostas como um
QuestionnaireResponse
- Como extrair recursos FHIR de um
QuestionnaireResponse
Pré-requisitos
- Uma versão recente do Android Studio (v4.1.2+)
- Android Emulator ou um dispositivo físico Android
- Código de amostra
- Conhecimento básico de desenvolvimento para Android em Kotlin.
O foco deste codelab é a Biblioteca de captura de dados estruturados. Conceitos e blocos de códigos sem relevância não serão abordados. Eles são incluídos somente para você copiar e colar. Se você nunca criou apps Android, comece criando seu primeiro app.
2. Começar a configuração
Fazer o download do código
Para fazer o download do código para este codelab, clone o repositório do SDK FHIR Android: git clone https://github.com/google/android-fhir.git
O projeto inicial deste codelab está localizado em codelabs/datacapture
.
Importar o app para o Android Studio
Vamos começar importando o app inicial para o Android Studio.
Abra o Android Studio, selecione Import Project (Gradle, Eclipse ADT etc.) e escolha a pasta codelabs/datacapture
no código-fonte que você baixou anteriormente.
Executar o app inicial
Agora que você importou o projeto para o Android Studio, está tudo pronto para executar o app pela primeira vez.
Conecte o dispositivo Android via USB ao host ou Inicie o emulador do Android Studio e clique em Run () na barra de ferramentas do Android Studio.
Como você pode notar, ainda não há muito aqui, então vamos exibir um questionário no seu app.
3. Adicionar a Biblioteca de captura de dados estruturados ao projeto
Adicionar as dependências da biblioteca de captura de dados estruturados
As dependências da biblioteca de captura de dados estruturados permitem que você integre a biblioteca de captura de dados estruturados ao seu app. Adicione as seguintes linhas ao final do arquivo app/build.gradle.kts
do seu projeto:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.0.0")
implementation("androidx.fragment:fragment-ktx:1.5.5")
}
Sincronizar seu projeto com arquivos do Gradle
Para garantir que todas as dependências estejam disponíveis para o app, sincronize seu projeto com os arquivos do Gradle neste momento.
Selecione Sync Project with Gradle Files () na barra de ferramentas do Android Studio. Execute o app novamente para conferir se as dependências estão funcionando corretamente.
4. Exibir um questionário
Nesta etapa, você vai adicionar a funcionalidade ao app inicial para renderizar um questionário em um FragmentContainerView
.
Durante o processo, o Android Studio vai solicitar que você adicione as importações necessárias:
androidx.core.os.bundleOf
androidx.fragment.app.add
androidx.fragment.app.commit
android.util.Log
com.google.android.fhir.datacapture.QuestionnaireFragment
Etapa 1: adicionar um FragmentContainerView
Adicione um FragmentContainerView
ao layout do aplicativo. É aqui que o QuestionnaireFragment
que você vai criar será exibido.
- Abra
activity_main.xml
(res > layout > activity_main.xml). - As opções para as visualizações Code, Split e Design ficam no canto superior direito do Layout Editor.
- Selecione a Visualização de código.
- Você não precisa do
TextView
, então exclua-o. Certifique-se de excluir tudo desde<TextView
até a tag/>
de término. - Adicione um
FragmentContainerView
aoConstraintLayout
. O arquivoactivity_main.xml
vai ficar parecido com este:<?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>
Etapa 2: adicionar um QuestionnaireFragment
à FragmentContainerView
QuestionnaireFragment
requer um questionário FHIR codificado em JSON para renderizar. Como o questionário é pequeno (menos de 512 KB), ele será incluído como um String
em um Bundle
de argumentos que vão ser usados para criar o fragmento. Questionários maiores precisam ser enviados como um URI
para melhorar a performance.
Você pode analisar o arquivo questionnaire.json
se quiser, mas um dos benefícios da biblioteca de captura de dados estruturados é que você não precisa saber a estrutura do questionário FHIR (nem nada sobre o FHIR) para que ele seja renderizado. Você vai analisar mais detalhes desse arquivo mais adiante neste codelab.
Crie um QuestionnaireFragment
usando o builder dele e defina o questionário com a função setter. Para mostrar o QuestionnaireFragment
no contêiner de layout, use o FragmentManager
para criar um FragmentTransaction
.
Abra MainActivity.kt
e adicione o seguinte código à 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()
)
}
}
Saiba mais sobre como usar fragmentos.
Para executar o codelab, clique em Run () na barra de ferramentas do Android Studio. Você verá algo como:
Navegue pelo questionário e tente inserir algumas respostas. Há alguns widgets de resposta diferentes usados, incluindo booleanos, texto e datas, que foram renderizados automaticamente com base no tipo subjacente do questionário FHIR original.
Tecnicamente, isso é tudo que você precisa fazer para renderizar um questionário. Parabéns!
Um questionário não é muito útil quando você não consegue ver as respostas inseridas pelos usuários. Vamos para a próxima etapa para obter a resposta ao questionário.
5. Receber uma resposta ao questionário
Nas etapas anteriores, você processou um questionário FHIR no seu app.
Nesta seção, você receberá as respostas do questionário como um QuestionnaireResponse.
Encontre o método submitQuestionnaire()
e adicione este código:
// 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)
Para receber a resposta, recupere o fragmento de questionário criado anteriormente e use o método getQuestionnaireResponse()
. Isso retorna um QuestionnaireResponse
FHIR HAPI que pode ser usado diretamente ou com outras partes do SDK FHIR Android. Este codelab usa outras bibliotecas FHIR HAPI para convertê-lo em uma string JSON para visualização no registro.
Execute o app novamente para recriá-lo com as mudanças mais recentes. Quando ele estiver em execução, insira algumas informações no questionário e toque em Enviar. No registro, você verá uma mensagem contendo QuestionnaireResponse
como 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. Extrair recursos FHIR de uma QuestionnaireResponse
O questionário incluído no projeto inicial é destinado a um fluxo simples de registro de pacientes. Portanto, talvez você queira usar as respostas do questionário para criar um recurso de paciente FHIR com base neles. Essa conversão de uma resposta de questionário para recursos FHIR é chamada de extração de dados. Podemos fazer isso com a classe ResourceMapper
da biblioteca de captura de dados estruturados.
Para executar a extração de dados, o questionário precisa ser criado para incluir informações sobre como realizar a extração de dados. Felizmente, o questionário de amostra já está configurado para Extração baseada em definição.
Encontre o método submitQuestionnaire()
e adicione este código:
lifecycleScope.launch {
val questionnaire =
jsonParser.parseResource(questionnaireJsonString) as Questionnaire
val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}
ResourceMapper.extract()
exige um questionário FHIR HAPI, que pode ser criado analisando a string JSON do questionário anterior, e um QuestionnaireResponse
, que já abordamos. Ela retorna um Bundle de transação FHIR HAPI contendo um ou mais recursos extraídos. Nesse caso, um único recurso de paciente.
Execute o app novamente para recriá-lo com as mudanças mais recentes. Quando ele estiver em execução, insira algumas informações e toque em Enviar. No registro, você verá uma mensagem extraction result
contendo a representação JSON do pacote FHIR extraído.
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7. Parabéns!
Você usou a biblioteca de captura de dados estruturados para processar questionários e respostas FHIR no seu app:
- Exibir um questionário
- Receber uma resposta ao questionário
- Extrair recursos FHIR de um
QuestionnaireResponse
Isso é tudo de que você precisa para começar a usá-lo.
À medida que avançar, talvez você queira trabalhar com recursos FHIR de mais maneiras em todo o aplicativo. Consulte a Biblioteca FHIR Engine do SDK FHIR Android para aprender a armazenar e gerenciar recursos FHIR localmente no seu aplicativo e sincronizar dados com um servidor FHIR remoto.
O que aprendemos
- Como adicionar a biblioteca de captura de dados estruturados ao seu app Android
- Como usar
QuestionnaireFragment
eResourceMapper
para trabalhar com questionários FHIR
Próximas etapas
- Confira a documentação da biblioteca de captura de dados estruturados
- Personalizar a aparência dos questionários renderizados
- Aplicar a biblioteca de captura de dados estruturados no seu app Android