Собирайте и обрабатывайте данные о состоянии здоровья с помощью библиотеки сбора структурированных данных.

1. Прежде чем начать

Что ты построишь

В этой лабораторной работе вы узнаете, как создать приложение для Android с помощью библиотеки сбора структурированных данных. Ваше приложение будет использовать библиотеку сбора структурированных данных для отображения и обработки анкет и ответов FHIR.

Что вы узнаете

  • Как интегрировать библиотеку сбора структурированных данных в ваше приложение для Android
  • Как отобразить анкету
  • Как получить ответы в виде QuestionnaireResponse
  • Как извлечь ресурсы FHIR из QuestionnaireResponse

Что вам понадобится

Эта лаборатория ориентирована на библиотеку структурированного сбора данных . Нерелевантные концепции и блоки кода замалчиваются и предоставляются для простого копирования и вставки. Если вы раньше не создавали приложения для 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 start screen

Запустите стартовое приложение

Теперь, когда вы импортировали проект в Android Studio, вы готовы впервые запустить приложение.

Подключите устройство Android через USB к хосту или запустите эмулятор Android Studio и нажмите «Выполнить» ( Run button ) на панели инструментов Android Studio.

Приложение Привет, мир

Как видите, здесь пока не так уж много, так что давайте сразу приступим к отображению анкеты в вашем приложении!

3. Добавьте в проект библиотеку сбора структурированных данных.

Добавьте зависимости для библиотеки сбора структурированных данных.

Зависимости библиотеки сбора структурированных данных позволяют интегрировать библиотеку сбора структурированных данных в ваше приложение. Добавьте следующие строки в конец файла app/build.gradle.kts вашего проекта:

dependencies {
    // ...

    implementation("com.google.android.fhir:data-capture:1.0.0")
    implementation("androidx.fragment:fragment-ktx:1.5.5")
}

Синхронизируйте свой проект с файлами Gradle.

Чтобы быть уверенным, что все зависимости доступны для вашего приложения, на этом этапе вам следует синхронизировать свой проект с файлами Gradle.

Выберите «Синхронизировать проект с файлами Gradle » ( Gradle syncbutton ) с панели инструментов 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 , который вы создадите позже.

  1. Откройте activity_main.xml ( res > Layout > Activity_main.xml ).
  2. Найдите параметры представлений «Код», «Разделение» и «Дизайн» в правом верхнем углу редактора макетов.
  3. Выберите представление «Код». Layout view options
  4. TextView вам не нужен, поэтому удалите его. Обязательно удалите все, от <TextView до закрывающего /> .
  5. Добавьте 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 в FragmentContainerView

Для отображения 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")

if (savedInstanceState == null) {
  supportFragmentManager.commit {
    setReorderingAllowed(true)
    add(
      R.id.fragment_container_view,
      QuestionnaireFragment.builder().setQuestionnaire(questionnaireJsonString!!).build()
    )
  }
}

Узнайте больше о том, как использовать фрагменты .

Давайте запустим кодовую лабораторию, нажав «Выполнить» ( Run button ) на панели инструментов 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.

Узнать больше