Google Fit api是返回Exercise数据的注释



我想从android的谷歌健身api中获取锻炼和食物数据。以下是的请求

public void createFitnessOptions() {
fitnessOptions = FitnessOptions.builder()
.addDataType(DataType.TYPE_NUTRITION, FitnessOptions.ACCESS_READ)
.addDataType(DataType.TYPE_WORKOUT_EXERCISE, FitnessOptions.ACCESS_READ)
.build();
}
public DataReadRequest getReadRequest(Long startTime, Long endTime) {
DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_NUTRITION)
.read(DataType.TYPE_WORKOUT_EXERCISE)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.bucketByTime(1, TimeUnit.DAYS)
.build();
return readRequest;
}
public void getHistory(Long startTime, Long endTime, boolean isPermissionGranted) {
if (isPermissionGranted) {
Fitness.getHistoryClient(context, account)
.readData(getReadRequest(startTime, endTime))
.addOnSuccessListener(response -> {
List<DataSet> dataSets = response.getDataSets();
for (DataSet dataSet : dataSets) {
dumpDataSet(dataSet);
}
})
.addOnFailureListener(e -> {
Log.d("GoogleFit", "OnFailure()", e);
});
}
}
private static void dumpDataSet(DataSet dataSet) {
Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
DateFormat dateFormat = getTimeInstance();
for (DataPoint dp : dataSet.getDataPoints()) {
Log.i(TAG, "Data point:");
Log.i(TAG, "tType: " + dp.getDataType().getName());
Log.i(TAG, "tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
Log.i(TAG, "tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
for (Field field : dp.getDataType().getFields()) {
Log.i(TAG, "tField: " + field.getName() + " Value: " + dp.getValue(field));
}
}
}

我已经从谷歌健身应用程序中添加了活动,但我在dataPoints中没有得到任何数据。

在onSuccess中,您应该从存储桶中读取数据集,而不是直接读取数据集作为响应,因为您每天都应用了存储桶策略。

if (response.getBuckets().size() > 0) {
for (Bucket bucket : readResponse.getBuckets()) {
List<DataSet> bucketDataSets = bucket.getDataSets();
...

最新更新