我目前正在开发一款使用Google的Fit API的Android应用。但是,当我从DataReadResult读取数据时,我得到DataSet ds = result.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);
:
IllegalArgumentException: Attempting to read data for com.google.step_count.delta, which was not requested
这是我从我的AsyncTask获取DataReadResult:
public static class GetReadResultTask extends AsyncTask<Void, Void, DataReadResult> {
protected DataReadResult doInBackground(Void... voids) {
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.set(Calendar.HOUR_OF_DAY, 0);
long startTime = cal.getTimeInMillis();
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
.bucketByTime(1, TimeUnit.HOURS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult result =
Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);
return result;
}
}
我该如何解决这个问题?任何帮助将不胜感激。
答案 0 :(得分:1)
我弄清楚我做错了什么。
在Buckets而不是DataSet中返回聚合数据,因此我不必调用result.getDataSets(DataType.TYPE_STEP_COUNT_DELTA);
,而是执行List<Buckets> buckets = result.getBuckets()
,然后使用
buckets.get(currentIndex).getDataSet(DataType.AGGREGATE_STEP_COUNT_DELTA);
答案 1 :(得分:0)
你需要将read()添加到DataReadRequest.Builder(),不是吗?
这就是我读数据的方式:
DataReadRequest readRequest = new DataReadRequest.Builder()
.read(DataType.TYPE_ACTIVITY_SEGMENT)
.read(DataType.TYPE_CALORIES_CONSUMED)
.setTimeRange(today.startTime, today.endTime, TimeUnit.MILLISECONDS)
.build();
在你的情况下,没有.read(DataType.TYPE_STEP_COUNT_DELTA)或类似的东西......