運用結構化資料擷取資料庫擷取及處理健康資料

1. 事前準備

建構項目

在本程式碼研究室中,您將瞭解如何使用結構化資料擷取程式庫建構 Android 應用程式。您的應用程式會使用結構化資料擷取程式庫,轉譯並處理 FHIR 問捲和回覆,

課程內容

  • 如何將結構化資料擷取程式庫整合至您的 Android 應用程式
  • 如何顯示問卷
  • 如何以QuestionnaireResponse的身分取得解答
  • 如何從 QuestionnaireResponse 擷取 FHIR 資源

軟硬體需求

本程式碼研究室著重於結構化資料擷取程式庫。系統會念出無關的概念和程式碼區塊,屆時您只要複製及貼上即可。如果您還沒有建構 Android 應用程式,可以先建立您的第一個應用程式

2. 做好準備

下載程式碼

如要下載本程式碼研究室的程式碼,請複製 Android FHIR SDK 存放區:git clone https://github.com/google/android-fhir.git

本程式碼研究室的範例專案位於 codelabs/datacapture

將應用程式匯入 Android Studio

首先,請將範例應用程式匯入 Android Studio。

開啟 Android Studio,選取「Import Project (Gradle、Eclipse ADT」等),然後從您先前下載的原始碼中選擇 codelabs/datacapture 資料夾。

Android Studio 開啟畫面

執行範例應用程式

您現在已將專案匯入 Android Studio,可以開始首次執行應用程式了。

透過 USB 將 Android 裝置連接至主機,或是點選「啟動 Android Studio 模擬器」,然後按一下 Android Studio 工具列中的「Run」(執行) (「Run」按鈕)。

Hello World 應用程式

由於這裡還沒有內容,因此我們現在就開始在應用程式中顯示問卷吧!

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 檔案保持同步。

在 Android Studio 工具列中,選取「Sync Project with Gradle Files」 (Gradle 同步處理按鈕)。您還要再次執行應用程式,檢查依附元件是否正常運作。

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. 選取程式碼檢視。版面配置檢視畫面選項
  4. 您不需要 TextView,請將其刪除。請務必從 <TextView/> 結尾全部刪除。
  5. ConstraintLayout 中新增 FragmentContainerView。您的 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」需要採用 JSON 編碼的 FHIR 問卷,才能轉譯內容。由於問卷很小 (少於 512 KB),您String 會放在 Bundle 引數中,以便用來建立片段。基於效能考量,建議提供較大的問卷URI

您可以視需要查看 questionnaire.json 檔案,但結構化資料擷取程式庫的其中一項優點是,您不需要瞭解 FHIR 問卷的結構 (或任何有關 FHIR 的) 就能進行算繪!您稍後會在程式碼研究室中更仔細查看這個檔案。

使用其建構工具建立 QuestionnaireFragment,並使用 setter 函式設定問卷。如要在版面配置容器中顯示 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()
    )
  }
}

進一步瞭解如何使用片段

按一下 Android Studio 工具列中的「Run」(執行) (「Run」按鈕),即可開始執行程式碼研究室。畫面應該會像下圖:

在模擬器中轉譯問卷

瀏覽問卷並嘗試輸入答案。還有數個不同的答案小工具,包括布林值、文字和日期,這些小工具會根據原始 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() 方法。這會傳回 HAPI FHIR QuestionnaireResponse,您可以直接使用,也可以與 Android FHIR SDK 的其他部分搭配使用。本程式碼研究室會使用其他 HAPI FHIR 程式庫將其轉換為 JSON 字串,並在記錄中查看。

再次執行應用程式,使用最新變更重新建構應用程式。系統開始作答後,請在問卷中輸入相關資訊,然後輕觸「提交」。記錄檔中應會顯示訊息,其中包含 JSON 形式的 QuestionnaireResponse

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. 從 QuestionnaireResponse 擷取 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 交易 Bundle,在本例中為單一病患資源。

再次執行應用程式,使用最新變更重新建構應用程式。啟動後,請輸入一些資訊,然後輕觸「提交」。現在記錄中應該會顯示訊息 extraction result,其中包含擷取 FHIR 套件的 JSON 表示法。

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 問捲和回覆:

  • 顯示問卷
  • 取得問卷回覆
  • QuestionnaireResponse 擷取 FHIR 資源

大功告成!

繼續進行時,您可能會想要透過更多方式在應用程式中使用 FHIR 資源。請查看 Android FHIR SDK 的 FHIR Engine Library,瞭解如何在本機應用程式中儲存和管理 FHIR 資源,以及與遠端 FHIR 伺服器同步處理資料。

涵蓋內容

  • 如何將結構化資料擷取程式庫新增至 Android 應用程式
  • 如何使用 QuestionnaireFragmentResourceMapper 處理 FHIR 問卷

後續步驟

  • 瀏覽結構化資料擷取程式庫的說明文件
  • 自訂轉譯後問卷的外觀和風格
  • 在自己的 Android 應用程式中套用結構化資料擷取程式庫

瞭解詳情