Mengambil dan memproses data kesehatan dengan Library Pengambilan Data Terstruktur

1. Sebelum memulai

Yang akan Anda build

Dalam codelab ini, Anda akan mempelajari cara membangun aplikasi Android dengan Library Pengambilan Data Terstruktur. Aplikasi Anda akan menggunakan Library Pengambilan Data Terstruktur untuk merender dan memproses Kuesioner dan respons FHIR.

Yang akan Anda pelajari

  • Cara mengintegrasikan Library Pengambilan Data Terstruktur ke dalam aplikasi Android Anda
  • Cara menampilkan Kuesioner
  • Cara mendapatkan jawaban sebagai QuestionnaireResponse
  • Cara mengekstrak resource FHIR dari QuestionnaireResponse

Yang Anda butuhkan

Codelab ini berfokus pada Library Pengambilan Data Terstruktur. Konsep dan blok kode yang tidak relevan akan dibahas sekilas dan disediakan, jadi Anda cukup menyalin dan menempelkannya. Jika belum pernah membuat aplikasi Android, Anda dapat mulai dengan membuat aplikasi pertama Anda.

2. Memulai persiapan

Mendownload Kode

Untuk mendownload kode codelab ini, clone repo Android FHIR SDK: git clone https://github.com/google/android-fhir.git

Project awal untuk codelab ini terletak di codelabs/datacapture.

Mengimpor aplikasi ke Android Studio

Mari kita mulai dengan mengimpor aplikasi awal ke Android Studio.

Buka Android Studio, pilih Import Project (Gradle, Eclipse ADT, etc.) dan pilih folder codelabs/datacapture dari kode sumber yang telah Anda download sebelumnya.

Layar mulai Android Studio

Menjalankan aplikasi awal

Setelah mengimpor project ke Android Studio, Anda siap menjalankan aplikasi untuk pertama kalinya.

Hubungkan perangkat Android Anda melalui USB ke host, atau Start the Android Studio emulator,lalu klik Run (Tombol Run) di toolbar Android Studio.

Aplikasi Hello World

Seperti yang Anda lihat, belum banyak yang tersedia di sini, jadi mari kita mulai menampilkan kuesioner di aplikasi Anda.

3. Menambahkan Library Pengambilan Data Terstruktur ke project

Menambahkan dependensi untuk Library Pengambilan Data Terstruktur

Dependensi Library Pengambilan Data Terstruktur memungkinkan Anda mengintegrasikan Library Pengambilan Data Terstruktur di aplikasi Anda. Tambahkan baris berikut ke akhir file app/build.gradle.kts project Anda:

dependencies {
    // ...

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

Menyinkronkan project dengan file Gradle

Guna memastikan bahwa semua dependensi tersedia untuk aplikasi, Anda harus menyinkronkan project dengan file gradle pada tahap ini.

Pilih Sync Project with Gradle Files (Tombol sinkronisasi Gradle) dari toolbar Android Studio. Anda juga menjalankan aplikasi kembali untuk memeriksa apakah dependensi berfungsi dengan benar.

4. Menampilkan Kuesioner

Pada langkah ini, Anda akan menambahkan fungsi ke aplikasi awal untuk merender kuesioner di FragmentContainerView.

Selama proses, Android Studio akan meminta Anda untuk menambahkan impor yang diperlukan:

  • androidx.core.os.bundleOf
  • androidx.fragment.app.add
  • androidx.fragment.app.commit
  • android.util.Log
  • com.google.android.fhir.datacapture.QuestionnaireFragment

Langkah 1: Tambahkan FragmentContainerView

Tambahkan FragmentContainerView ke tata letak aplikasi. Di sinilah QuestionnaireFragment yang akan Anda buat nanti akan ditampilkan.

  1. Buka activity_main.xml (res > layout > activity_main.xml).
  2. Temukan opsi untuk tampilan Code, Split, dan Design di kanan atas Layout Editor.
  3. Pilih Tampilan kode. Opsi tampilan tata letak
  4. Anda tidak memerlukan TextView, jadi hapus. Pastikan untuk menghapus semuanya dari <TextView hingga /> penutup.
  5. Tambahkan FragmentContainerView di dalam ConstraintLayout. File activity_main.xml Anda akan terlihat seperti ini:
    <?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>
    

Langkah 2: Tambahkan QuestionnaireFragment ke FragmentContainerView

QuestionnaireFragment memerlukan Kuesioner FHIR yang dienkode JSON agar dapat dirender. Karena kuesioner ini kecil (<512 KB), Anda akan menyertakannya sebagai String dalam Bundle argumen yang akan digunakan untuk membuat fragmen. Untuk alasan performa, kuesioner yang lebih besar sebaiknya diberikan sebagai URI.

Anda dapat melihat file questionnaire.json jika mau, tetapi salah satu manfaat Library Pengambilan Data Terstruktur adalah Anda tidak perlu mengetahui struktur Kuesioner FHIR (atau apa pun tentang FHIR) untuk dapat merendernya. Anda akan mempelajari file ini secara lebih mendetail nanti di codelab.

Buat QuestionnaireFragment menggunakan buildernya, dan tetapkan kuesioner menggunakan fungsi penyetel. Untuk menampilkan QuestionnaireFragment dalam penampung tata letak, gunakan FragmentManager untuk membuat FragmentTransaction.

Buka MainActivity.kt dan tambahkan kode berikut ke class 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()
    )
  }
}

Pelajari lebih lanjut cara menggunakan fragmen.

Mari kita jalankan codelab dengan mengklik Run (Tombol Run) di toolbar Android Studio. Anda akan melihat sesuatu yang mirip dengan ini:

Kuesioner yang Dirender di Emulator

Jelajahi kuesioner dan coba masukkan beberapa jawaban. Ada beberapa widget jawaban yang digunakan, termasuk boolean, teks, dan tanggal, yang secara otomatis dirender berdasarkan jenis yang mendasarinya dalam kuesioner FHIR asli.

Secara teknis, hanya itu yang perlu Anda lakukan untuk menyampaikan kuesioner. Selamat!

Kuesioner tidak terlalu membantu jika Anda tidak dapat melihat jawaban yang dimasukkan pengguna. Mari kita lanjutkan ke langkah selanjutnya untuk mendapatkan Tanggapan Kuesioner.

5. Dapatkan Jawaban Kuesioner

Pada langkah sebelumnya, Anda merender kuesioner FHIR di aplikasi.

Di bagian ini, Anda akan mendapatkan jawaban dari kuesioner sebagai QuestionnaireResponse.

Temukan metode submitQuestionnaire() dan tambahkan kode berikut:

// 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)

Untuk mendapatkan respons kuesioner, Anda mengambil fragmen kuesioner yang dibuat sebelumnya, lalu menggunakan metode getQuestionnaireResponse(). Tindakan ini akan menampilkan QuestionnaireResponse HAPI FHIR yang dapat Anda gunakan secara langsung atau dengan bagian Android FHIR SDK lainnya. Codelab ini menggunakan library HAPI FHIR lain untuk mengonversinya menjadi string JSON agar dapat dilihat di log.

Jalankan kembali aplikasi untuk membangun ulang dengan perubahan terbaru. Setelah survei berjalan, masukkan beberapa informasi ke dalam kuesioner dan ketuk Kirim. Di log, Anda akan melihat pesan yang berisi QuestionnaireResponse sebagai 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. Mengekstrak Resource FHIR dari QuestionnaireResponse

Kuesioner yang disertakan dengan project awal ditujukan untuk alur pendaftaran pasien yang sederhana, jadi sebaiknya gunakan respons kuesioner untuk membuat resource Pasien FHIR berdasarkan respons tersebut. Konversi dari respons kuesioner ke resource FHIR ini disebut ekstraksi data. Kita dapat melakukannya dengan class ResourceMapper dari Library Pengambilan Data Terstruktur.

Untuk melakukan ekstraksi data, kuesioner Anda harus ditulis untuk menyertakan informasi tentang cara melakukan ekstraksi data. Untungnya, sampel kuesioner sudah disiapkan untuk Ekstraksi berbasis definisi.

Temukan metode submitQuestionnaire() dan tambahkan kode berikut:

lifecycleScope.launch {
  val questionnaire =
    jsonParser.parseResource(questionnaireJsonString) as Questionnaire
  val bundle = ResourceMapper.extract(questionnaire, questionnaireResponse)
  Log.d("extraction result", jsonParser.encodeResourceToString(bundle))
}

ResourceMapper.extract() memerlukan Kuesioner HAPI FHIR, yang dapat Anda buat dengan menguraikan string JSON kuesioner dari materi sebelumnya, dan QuestionnaireResponse, yang sudah kita dapatkan sebelumnya. Metode ini menampilkan Bundle transaksi HAPI FHIR yang berisi satu atau beberapa resource yang diekstrak, dalam hal ini, satu resource Pasien.

Jalankan kembali aplikasi untuk membangun ulang dengan perubahan terbaru. Setelah dijalankan, masukkan beberapa informasi, lalu ketuk Kirim. Di log, Anda sekarang akan melihat pesan extraction result yang berisi representasi JSON dari Paket FHIR yang diekstrak.

D/extraction result: {"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Patient","identifier":[{"value":"12345"}],"name":[{"family":"Lee","given":["Dani"]}],"birthDate":"1990-02-14"}}]}

7. Selamat!

Anda telah menggunakan Library Pengambilan Data Terstruktur untuk memproses kuesioner dan respons FHIR di aplikasi Anda:

  • Menampilkan Kuesioner
  • Dapatkan Jawaban Kuesioner
  • Mengekstrak Resource FHIR dari QuestionnaireResponse

Hanya ini yang Anda perlukan untuk mengaktifkannya.

Sambil melanjutkan, Anda mungkin ingin menggunakan resource FHIR dengan berbagai cara di seluruh aplikasi. Lihat FHIR Engine Library Android FHIR SDK untuk mempelajari cara menyimpan dan mengelola resource FHIR secara lokal di aplikasi Anda serta menyinkronkan data dengan server FHIR jarak jauh.

Yang telah kita bahas

  • Cara menambahkan Library Pengambilan Data Terstruktur ke aplikasi Android Anda
  • Cara menggunakan QuestionnaireFragment dan ResourceMapper untuk bekerja dengan kuesioner FHIR

Langkah Berikutnya

  • Pelajari dokumentasi untuk Library Pengambilan Data Terstruktur
  • Menyesuaikan tampilan dan nuansa kuesioner yang dirender
  • Menerapkan Library Pengambilan Data Terstruktur di aplikasi Android Anda sendiri

Pelajari Lebih Lanjut