1. Прежде чем начать
Что ты построишь
В этой лабораторной работе вы узнаете, как создать приложение для Android с помощью библиотеки сбора структурированных данных. Ваше приложение будет использовать библиотеку сбора структурированных данных для отображения и обработки анкет и ответов FHIR.
Что вы узнаете
- Как интегрировать библиотеку сбора структурированных данных в ваше приложение для Android
- Как отобразить анкету
- Как получить ответы в виде
QuestionnaireResponse
- Как извлечь ресурсы FHIR из
QuestionnaireResponse
Что вам понадобится
- Последняя версия Android Studio (v4.1.2+).
- Эмулятор Android или физическое устройство Android
- Пример кода
- Базовые знания разработки Android на Kotlin.
Эта лаборатория ориентирована на библиотеку структурированного сбора данных . Нерелевантные концепции и блоки кода замалчиваются и предоставляются для простого копирования и вставки. Если вы раньше не создавали приложения для Android, вы можете начать с создания своего первого приложения .
2. Настройте
Загрузите код
Чтобы загрузить код для этой лаборатории, клонируйте репозиторий Android FHIR SDK: git clone https://github.com/google/android-fhir.git
Стартовый проект этой лаборатории кода находится в codelabs/datacapture
.
Импортируйте приложение в Android Studio.
Начнем с импорта стартового приложения в Android Studio.
Откройте Android Studio, выберите «Импортировать проект» (Gradle, Eclipse ADT и т. д.) и выберите папку codelabs/datacapture
из исходного кода, который вы загрузили ранее.
Запустите стартовое приложение
Теперь, когда вы импортировали проект в Android Studio, вы готовы впервые запустить приложение.
Подключите устройство Android через USB к хосту или запустите эмулятор Android Studio и нажмите «Выполнить» ( ) на панели инструментов Android Studio.
Как видите, здесь пока не так уж много, так что давайте сразу приступим к отображению анкеты в вашем приложении!
3. Добавьте в проект библиотеку сбора структурированных данных.
Добавьте зависимости для библиотеки сбора структурированных данных.
Зависимости библиотеки сбора структурированных данных позволяют интегрировать библиотеку сбора структурированных данных в ваше приложение. Добавьте следующие строки в конец файла app/build.gradle.kts
вашего проекта:
dependencies {
// ...
implementation("com.google.android.fhir:data-capture:1.2.0")
implementation("androidx.fragment:fragment-ktx:1.6.0")
}
Синхронизируйте свой проект с файлами Gradle.
Чтобы быть уверенным, что все зависимости доступны для вашего приложения, на этом этапе вам следует синхронизировать свой проект с файлами Gradle.
Выберите «Синхронизировать проект с файлами Gradle» ( ) на панели инструментов Android Studio. Вы также можете снова запустить приложение, чтобы проверить правильность работы зависимостей.
4. Отобразите анкету
На этом этапе вы добавите в стартовое приложение функцию отображения анкеты в FragmentContainerView
.
Попутно Android Studio предложит вам добавить необходимый импорт:
-
androidx.core.os.bundleOf
-
androidx.fragment.app.add
-
androidx.fragment.app.commit
-
android.util.Log
-
com.google.android.fhir.datacapture.QuestionnaireFragment
Шаг 1. Добавьте FragmentContainerView
Добавьте FragmentContainerView
в макет приложения. Здесь будет отображаться QuestionnaireFragment
, который вы создадите позже.
- Откройте
activity_main.xml
( res > Layout > Activity_main.xml ). - Найдите параметры представлений «Код», «Разделение» и «Дизайн» в правом верхнем углу редактора макетов.
- Выберите представление «Код».
-
TextView
вам не нужен, поэтому удалите его. Обязательно удалите все, от<TextView
до закрывающего/>
. - Добавьте
FragmentContainerView
внутриConstraintLayout
. Ваш файлactivity_main.xml
должен выглядеть примерно так:<?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>
Шаг 2. Настройте QuestionnaireFragment
Для отображения QuestionnaireFragment
требуется вопросник FHIR в формате JSON. Поскольку анкета небольшая (<512 КБ), вы включите ее как String
в Bundle
аргументов, которые будут использоваться для создания фрагмента. Анкеты большего размера следует предоставлять в виде URI
из соображений производительности.
Если хотите, вы можете просмотреть файл questionnaire.json
, но одно из преимуществ библиотеки сбора структурированных данных заключается в том, что вам не нужно знать структуру анкеты FHIR (или что-либо о FHIR), чтобы ее отобразить. это! Вы более подробно рассмотрите этот файл позже в лаборатории кода.
Создайте QuestionnaireFragment
с помощью его конструктора и настройте анкету с помощью функции установки. Чтобы отобразить QuestionnaireFragment
в контейнере макета, используйте FragmentManager
для создания FragmentTransaction
.
Откройте MainActivity.kt
и добавьте следующий код в класс MainActivity
:
// Step 2: Configure a QuestionnaireFragment
questionnaireJsonString = getStringFromAssets("questionnaire.json")
val questionnaireFragment =
QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
Шаг 3. Добавьте фрагмент вопросника в FragmentContainerView.
Чтобы отобразить QuestionnaireFragment
в контейнере макета, используйте FragmentManager
для создания FragmentTransaction
. FragmentManager
обрабатывает создание экземпляров, используя ранее созданный questionnaireParams
.
Добавьте следующий код в класс 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()
}
Узнайте больше о том , как использовать фрагменты .
Давайте запустим кодовую лабораторию, нажав «Выполнить» ( ) на панели инструментов Android Studio. Вы должны увидеть что-то похожее на это:
Просмотрите анкету и попробуйте ввести несколько ответов. Используются несколько различных виджетов ответов, включая логические значения, текст и даты, которые автоматически отображаются на основе базового типа в исходном вопроснике FHIR.
Технически, это все, что вам нужно сделать для рендеринга анкеты! Поздравляем!
Анкета бесполезна, если вы не видите ответы, которые вводят пользователи. Давайте перейдем к следующему шагу — получению ответа на анкету!
5. Получите ответ на анкету
На предыдущих шагах вы разместили анкету FHIR в своем приложении.
В этом разделе вы получите ответы из анкеты в виде ответа на анкету.
Найдите метод submitQuestionnaire()
и добавьте следующий код:
// 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)
Чтобы получить ответ на анкету, вы извлекаете созданный ранее фрагмент анкеты и используете метод getQuestionnaireResponse()
. В результате возвращается QuestionnaireResponse
HAPI FHIR, который можно использовать напрямую или с другими частями Android FHIR SDK. В этой лаборатории кода используются другие библиотеки HAPI FHIR для преобразования ее в строку JSON для просмотра в журнале.
Запустите приложение еще раз, чтобы восстановить его с учетом последних изменений. После запуска введите некоторую информацию в анкету и нажмите «Отправить» . В журнале вы должны увидеть сообщение, содержащее QuestionnaireResponse
в формате 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. Извлеките ресурсы FHIR из ответа на вопросник.
Анкета, включенная в стартовый проект, предназначена для простого процесса регистрации пациентов, поэтому в конечном итоге вы можете использовать ответы на анкету для создания на их основе ресурса для пациентов FHIR . Такое преобразование ответов на анкету в ресурсы FHIR называется извлечением данных . Мы можем сделать это с помощью класса ResourceMapper
библиотеки сбора структурированных данных.
Чтобы выполнить извлечение данных, ваша анкета должна быть составлена так, чтобы включать информацию о том, как выполнить извлечение данных. К счастью, образец анкеты уже настроен для извлечения данных на основе определений .
Найдите метод submitQuestionnaire()
и добавьте следующий код:
lifecycleScope.launch {
val questionnaire =
jsonParser.parseResource(questionnaireJsonString) as Questionnaire
val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}
ResourceMapper.extract()
требует опросника HAPI FHIR, который можно создать путем анализа строки JSON опросника, полученной ранее, и QuestionnaireResponse
, который мы уже получили ранее. Он возвращает пакет транзакции HAPI FHIR, содержащий один или несколько извлеченных ресурсов — в данном случае один ресурс пациента.
Запустите приложение еще раз, чтобы восстановить его с учетом последних изменений. После запуска введите некоторую информацию и нажмите «Отправить» . Теперь в журнале вы должны увидеть extraction result
сообщения, содержащий JSON-представление извлеченного пакета FHIR.
D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}
7. Поздравляем!
Вы использовали библиотеку сбора структурированных данных для обработки анкет и ответов FHIR в своем приложении:
- Показать анкету
- Получите ответ на анкету
- Извлеките ресурсы FHIR из
QuestionnaireResponse
Это все, что вам нужно, чтобы запустить его!
По мере продвижения вам может потребоваться больше возможностей для работы с ресурсами FHIR в рамках вашего приложения. Ознакомьтесь с библиотекой FHIR Engine в Android FHIR SDK, чтобы узнать, как хранить ресурсы FHIR и управлять ими локально в вашем приложении, а также синхронизировать данные с удаленным сервером FHIR.
Что мы рассмотрели
- Как добавить библиотеку сбора структурированных данных в ваше приложение для Android
- Как использовать
QuestionnaireFragment
иResourceMapper
для работы с анкетами FHIR
Следующие шаги
- Изучите документацию по библиотеке сбора структурированных данных.
- Настройте внешний вид отображаемых анкет.
- Примените библиотеку сбора структурированных данных в своем собственном приложении для Android.