Panduan ini membahas proses penulisan atau pembaruan data di Health Connect.
Menyiapkan struktur data
Sebelum menulis data, kita perlu menyiapkan kumpulan data terlebih dahulu. Lebih dari 50 jenis data memiliki strukturnya masing-masing. Lihat referensi Jetpack untuk mengetahui detail selengkapnya tentang jenis data yang tersedia.
Kumpulan data dasar
Jenis data Langkah di Health Connect mendeteksi jumlah langkah pengguna di sela-sela pembacaan. Jumlah langkah mewakili pengukuran umum di berbagai platform kesehatan dan kebugaran.
Contoh berikut menunjukkan cara menetapkan data jumlah langkah:
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
Kumpulan data dengan satuan pengukuran
Health Connect dapat menyimpan nilai bersama dengan satuan pengukurannya untuk memberikan akurasi. Salah satu contohnya adalah jenis data Nutrisi yang luas dan komprehensif. Jenis data ini mencakup berbagai bidang gizi opsional, mulai dari total karbohidrat hingga vitamin. Setiap titik data mewakili gizi yang berpotensi dikonsumsi sebagai bagian dari makanan atau item makanan.
Dalam jenis data ini, semua nutrisi ditampilkan dalam satuan
Mass
, sementara energy
ditampilkan dalam satuan Energy
.
Contoh berikut menunjukkan cara menetapkan data gizi untuk pengguna yang telah makan pisang:
val banana = NutritionRecord(
name = "banana",
energy = 105.0.kilocalories,
dietaryFiber = 3.1.grams,
potassium = 0.422.grams,
totalCarbohydrate = 27.0.grams,
totalFat = 0.4.grams,
saturatedFat = 0.1.grams,
sodium = 0.001.grams,
sugar = 14.0.grams,
vitaminB6 = 0.0005.grams,
vitaminC = 0.0103.grams,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
Kumpulan data dengan data serial
Health Connect dapat menyimpan daftar data serial. Salah satu contohnya adalah jenis data Detak Jantung yang menangkap serangkaian contoh detak jantung yang terdeteksi di antara pembacaan.
Dalam jenis data ini, parameter samples
direpresentasikan oleh daftar
contoh Detak Jantung. Setiap sampel berisi nilai
beatsPerMinute
dan nilai time
.
Contoh berikut menunjukkan cara menetapkan data seri detak jantung:
val heartRateRecord = HeartRateRecord(
startTime = START_TIME,
startZoneOffset = START_ZONE_OFFSET,
endTime = END_TIME,
endZoneOffset = END_ZONE_OFFSET,
// records 10 arbitrary data, to replace with actual data
samples = List(10) { index ->
HeartRateRecord.Sample(
time = START_TIME + Duration.ofSeconds(index.toLong()),
beatsPerMinute = 100 + index.toLong(),
)
}
)
Menulis data
Salah satu alur kerja umum di Health Connect adalah menulis data. Untuk menambahkan kumpulan data,
gunakan insertRecords
.
Contoh berikut menunjukkan cara menulis data dengan menyisipkan jumlah langkah:
suspend fun insertSteps(healthConnectClient: HealthConnectClient) {
try {
val stepsRecord = StepsRecord(
count = 120,
startTime = START_TIME,
endTime = END_TIME,
startZoneOffset = START_ZONE_OFFSET,
endZoneOffset = END_ZONE_OFFSET
)
healthConnectClient.insertRecords(listOf(stepsRecord))
} catch (e: Exception) {
// Run error handling here
}
}
Memperbarui data
Jika perlu mengubah satu atau beberapa kumpulan data, terutama saat Anda perlu menyinkronkan datastore aplikasi dengan data dari Health Connect, Anda dapat memperbarui data. Ada dua cara untuk memperbarui data yang ada, yang bergantung pada ID yang digunakan untuk menemukan kumpulan data.
Metadata
Sebaiknya periksa class Metadata
terlebih dahulu karena hal ini diperlukan saat
memperbarui data. Saat pembuatan, setiap Record
di Health Connect memiliki kolom
metadata
. Properti berikut relevan dengan
sinkronisasi:
Properti | Deskripsi |
---|---|
id
|
Setiap Record di Health Connect memiliki nilai id
yang unik.Health Connect akan otomatis mengisi ini saat menyisipkan kumpulan data baru. |
lastModifiedTime
|
Setiap Record juga melacak kapan terakhir kali
kumpulan data diubah.Health Connect otomatis mengisinya. |
clientRecordId
|
Setiap Record dapat memiliki ID unik yang terkait dengannya untuk digunakan sebagai referensi di datastore aplikasi Anda.
Aplikasi Anda menyediakan nilai ini. |
clientRecordVersion
|
Jika kumpulan data memiliki clientRecordId , clientRecordVersion dapat digunakan untuk memungkinkan data
tetap sinkron dengan versi di datastore
aplikasi.Aplikasi Anda menyediakan nilai ini. |
Memperbarui melalui ID Kumpulan Data
Untuk memperbarui data, siapkan kumpulan data yang diperlukan terlebih dahulu. Lakukan perubahan pada
kumpulan data jika diperlukan. Selanjutnya, panggil updateRecords
untuk melakukan
perubahan.
Contoh berikut menunjukkan cara mengupdate data. Untuk tujuan ini, setiap kumpulan data memiliki nilai offset zona yang disesuaikan menjadi PST.
suspend fun updateSteps(
healthConnectClient: HealthConnectClient,
prevRecordStartTime: Instant,
prevRecordEndTime: Instant
) {
try {
val request = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(
prevRecordStartTime,
prevRecordEndTime
)
)
)
val newStepsRecords = arrayListOf<StepsRecord>()
for (record in request.records) {
// Adjusted both offset values to reflect changes
val sr = StepsRecord(
count = record.count,
startTime = record.startTime,
startZoneOffset = record.startTime.atZone(ZoneId.of("PST")).offset,
endTime = record.endTime,
endZoneOffset = record.endTime.atZone(ZoneId.of("PST")).offset,
metadata = record.metadata
)
newStepsRecords.add(sr)
}
client.updateRecords(newStepsRecords)
} catch (e: Exception) {
// Run error handling here
}
}
Memperbarui dan Menyisipkan melalui ID Kumpulan Data Klien
Jika Anda menggunakan nilai ID Kumpulan Data Klien dan Versi Kumpulan Data Klien opsional, sebaiknya gunakan insertRecords
, bukan updateRecords
.
Fungsi insertRecords
memiliki kemampuan untuk memperbarui dan menyisipkan data.
Jika data ada di Health Connect berdasarkan serangkaian
ID Kumpulan Data Klien tertentu, data tersebut akan ditimpa. Jika tidak, data akan ditulis sebagai data baru.
Skenario ini berguna setiap kali Anda perlu menyinkronkan data dari
datastore aplikasi ke Health Connect.
Contoh berikut menunjukkan cara melakukan pembaruan dan penyisipan pada data yang diambil dari datastore aplikasi:
suspend fun pullStepsFromDatastore() : ArrayList<StepsRecord> {
val appStepsRecords = arrayListOf<StepsRecord>()
// Pull data from app datastore
// ...
// Make changes to data if necessary
// ...
// Store data in appStepsRecords
// ...
var sr = StepsRecord(
// Assign parameters for this record
metadata = Metadata(
clientRecordId = cid
)
)
appStepsRecords.add(sr)
// ...
return appStepsRecords
}
suspend fun upsertSteps(
healthConnectClient: HealthConnectClient,
newStepsRecords: ArrayList<StepsRecord>
) {
try {
healthConnectClient.insertRecords(newStepsRecords)
} catch (e: Exception) {
// Run error handling here
}
}
Setelah itu, Anda dapat memanggil fungsi ini di thread utama.
upsertSteps(healthConnectClient, pullStepsFromDatastore())
Pemeriksaan nilai di Versi Kumpulan Data Klien
Jika proses pembaruan dan penyisipan data Anda mencakup Versi Kumpulan Data Klien, Health
Connect akan melakukan pemeriksaan perbandingan dalam nilai
clientRecordVersion
. Jika versi dari data yang disisipkan lebih tinggi daripada versi dari data yang ada, pembaruan dan penyisipan akan terjadi. Jika tidak, proses
akan mengabaikan perubahan dan nilainya tetap sama.
Untuk menyertakan pembuatan versi dalam data, Anda harus menyediakan
Metadata.clientRecordVersion
dengan nilai Long
berdasarkan logika
pembuatan versi.
val sr = StepsRecord(
count = count,
startTime = startTime,
startZoneOffset = startZoneOffset,
endTime = endTime,
endZoneOffset = endZoneOffset,
metadata = Metadata(
clientRecordId = cid,
clientRecordVersion = version
)
)
Pembaruan dan penyisipan tidak otomatis menambah version
setiap kali ada perubahan,
sehingga mencegah instance yang tidak terduga menimpa data. Dengan demikian, Anda harus
menyediakannya dengan nilai yang lebih tinggi secara manual.
Praktik terbaik
Setelah membuat logika, pertimbangkan untuk mengikuti praktik terbaik saat menulis atau memperbarui data.