Запрос должен запрашивать Google Fit для агрегированных данных о частоте сердечных сокращений в течение последних 3 месяцев, сгруппированных по 1-дневным ведрам. Однако я получаю три точки данных, в том числе два в течение одного дня (29 мая). Ожидаемый результат - это всего два данных: один для 25 мая и один для 29 мая. В чем причина этого и как я могу решить проблему?Google Fit History API возвращает неверные ведра времени
Это код:
DateTime now = new DateTime();
DateTime start = now.minusMonths(3);
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_HEART_RATE_BPM, DataType.AGGREGATE_HEART_RATE_SUMMARY)
.bucketByTime(1, TimeUnit.DAYS)
.enableServerQueries()
.setTimeRange(start.getMillis(), now.getMillis(), TimeUnit.MILLISECONDS)
.build();
Fitness.HistoryApi.readData(googleApiClient, readRequest)
.setResultCallback(new ResultCallback<DataReadResult>() {
@Override public void onResult(@NonNull DataReadResult dataReadResult) {
ArrayList<DataPoint> dataPoints = new ArrayList<>();
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet : dataSets) {
Timber.d("dataSet.dataType: %s", dataSet.getDataType().getName());
for (DataPoint dp : dataSet.getDataPoints()) {
dataPoints.add(dp);
Timber.d("Data point:");
Timber.d("Type: %s", dp.getDataType().getName());
Timber.d("Time: %s",
new DateTime(dp.getTimestamp(TimeUnit.MILLISECONDS)).toString());
for (Field field : dp.getDataType().getFields()) {
Timber.d("Field: %s. Value: %s", field.getName(), dp.getValue(field));
}
}
}
}
//...
}
});
Это выход:
05-30 19:34:05.516 13518-13518/com.test D/TestFragment$1$override: Data point:
05-30 19:34:05.516 13518-13518/com.test D/TestFragment$1$override: Type: com.google.heart_rate.summary
05-30 19:34:05.516 13518-13518/com.test D/TestFragment$1$override: Time: 2016-05-25T22:22:58.526+02:00
05-30 19:34:05.517 13518-13518/com.test D/TestFragment$1$override: Field: average. Value: 65.0
05-30 19:34:05.517 13518-13518/com.test D/TestFragment$1$override: Field: max. Value: 65.0
05-30 19:34:05.517 13518-13518/com.test D/TestFragment$1$override: Field: min. Value: 65.0
05-30 19:34:05.517 13518-13518/com.test D/TestFragment$1$override: Data point:
05-30 19:34:05.518 13518-13518/com.test D/TestFragment$1$override: Type: com.google.heart_rate.summary
05-30 19:34:05.518 13518-13518/com.test D/TestFragment$1$override: Time: 2016-05-29T20:33:37.170+02:00
05-30 19:34:05.519 13518-13518/com.test D/TestFragment$1$override: Field: average. Value: 90.80258
05-30 19:34:05.519 13518-13518/com.test D/TestFragment$1$override: Field: max. Value: 164.0
05-30 19:34:05.519 13518-13518/com.test D/TestFragment$1$override: Field: min. Value: 55.0
05-30 19:34:05.519 13518-13518/com.test D/TestFragment$1$override: Data point:
05-30 19:34:05.520 13518-13518/com.test D/TestFragment$1$override: Type: com.google.heart_rate.summary
05-30 19:34:05.520 13518-13518/com.test D/TestFragment$1$override: Time: 2016-05-29T20:48:37.321+02:00
05-30 19:34:05.520 13518-13518/com.test D/TestFragment$1$override: Field: average. Value: 86.78551
05-30 19:34:05.521 13518-13518/com.test D/TestFragment$1$override: Field: max. Value: 106.0
05-30 19:34:05.521 13518-13518/com.test D/TestFragment$1$override: Field: min. Value: 78.0
Спасибо, но это не тот случай. Источник данных на самом деле не имеет значения, поскольку я хочу получить все измерения сердечного ритма. Ссылка, которую вы опубликовали, описывает другую проблему. – EyesClear