1. Antes de começar
O que você vai criar
Neste codelab, você vai 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
O que é necessário
- Uma versão recente do Android Studio (v4.1.2+)
- Android Emulator ou um dispositivo Android físico
- Código de amostra
- Conhecimento básico de desenvolvimento para Android em Kotlin.
Este codelab é focado na Biblioteca de captura de dados estruturados (link em inglês). 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 antes, pode começar criando seu primeiro app.
2. Começar a configuração
Fazer o download do código
Para fazer o download do código deste codelab, clone o repositório do SDK FHIR do 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 ver, ainda não há muitas informações, então vamos começar a 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 linhas abaixo 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 o projeto com arquivos do Gradle
Para garantir que todas as dependências estejam disponíveis para o app, sincronize o 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 verificar 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
.
Ao longo do caminho, o Android Studio 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 uma FragmentContainerView
ao layout do aplicativo. É aqui que o QuestionnaireFragment
que você vai criar mais tarde será exibido.
- Abra
activity_main.xml
(res > layout > activity_main.xml). - Encontre as opções para as visualizações Code, Split e Design no canto superior direito do Layout Editor.
- Selecione a visualização "Code".
- Como você não precisa do
TextView
, exclua-o. Certifique-se de excluir tudo desde<TextView
até a tag/>
de término. - Adicione um
FragmentContainerView
dentro doConstraintLayout
. Seu 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
ao FragmentContainerView
QuestionnaireFragment
requer um questionário FHIR codificado em JSON para ser renderizado. Como o questionário é pequeno (menos de 512 KB), você o incluirá como um String
em um Bundle
de argumentos que será usado para criar o fragmento. Questionários maiores precisam ser fornecidos como URI
por motivos de desempenho.
Se quiser, você pode consultar o arquivo questionnaire.json
, mas um dos benefícios da Biblioteca de Captura de Dados Estruturados é que não é preciso saber a estrutura do questionário FHIR (nem nada sobre o FHIR) para fazer a renderização. Você vai conhecer melhor esse arquivo mais adiante no codelab.
Crie um QuestionnaireFragment
usando o builder correspondente 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. Alguns widgets de resposta diferentes foram usados, incluindo booleanos, texto e datas, que foram renderizados automaticamente com base no tipo subjacente do questionário FHIR original.
Tecnicamente, isso é tudo o que você precisa fazer para renderizar um questionário. Parabéns!
Um questionário não será muito útil se você não puder ver as respostas inseridas pelos usuários. Vamos para a próxima etapa para receber uma resposta ao questionário.
5. Receber uma resposta ao questionário
Nas etapas anteriores, você renderizou um questionário FHIR no seu app.
Nesta seção, você receberá as respostas do questionário como uma resposta do questionário.
Encontre o método submitQuestionnaire()
e adicione o seguinte 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 as respostas, extraia o fragmento do questionário criado anteriormente e use o método getQuestionnaireResponse()
. Isso retorna um FHIR da HAPI QuestionnaireResponse
que pode ser usado diretamente ou com outras partes do SDK FHIR do Android. Este codelab usa outras bibliotecas FHIR HAPI para convertê-la em uma string JSON para exibir no registro.
Execute o app novamente para recriá-lo com as mudanças mais recentes. Quando ele estiver sendo executado, insira algumas informações no questionário e toque em Enviar. No registro, você verá uma mensagem contendo o 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. Extraia recursos FHIR de um QuestionnaireResponse
O questionário incluído no projeto inicial é para 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 nelas. 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 realizar a extração de dados, seu questionário precisa ser criado para incluir informações sobre como fazer 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 o seguinte 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()
requer um questionário FHIR HAPI, que pode ser criado analisando a string JSON do questionário anterior, e um QuestionnaireResponse
, que já abordamos anteriormente. Ela retorna um Bundle de transação FHIR HAPI contendo um ou mais recursos extraídos. Neste caso, um único recurso "Paciente".
Execute o app novamente para recriá-lo com as mudanças mais recentes. Quando ele estiver sendo executado, 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 app:
- Exibir um questionário
- Receber uma resposta ao questionário
- Extrair recursos FHIR de um
QuestionnaireResponse
Isso é tudo que você precisa para começar a usar!
À medida que você prossegue, talvez queira trabalhar com recursos FHIR de mais maneiras em todo o aplicativo. Confira a Biblioteca FHIR Engine do SDK FHIR do Android para saber como armazenar e gerenciar recursos FHIR localmente em 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 os 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 próprio app Android