1

我目前正在开发一个使用 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;
    }
}

我怎样才能解决这个问题?任何帮助,将不胜感激。

4

2 回答 2

1

我弄清楚我做错了什么。

聚合数据在 Buckets 中返回,而不是在 DataSets 中,所以result.getDataSets(DataType.TYPE_STEP_COUNT_DELTA);我必须调用而不是调用List<Buckets> buckets = result.getBuckets(),然后遍历存储桶并使用获取数据集

buckets.get(currentIndex).getDataSet(DataType.AGGREGATE_STEP_COUNT_DELTA);
于 2015-01-05T02:19:03.213 回答
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) 或类似的东西......

于 2014-12-16T16:07:40.067 回答