从DataReadResult读取数据时出现IllegalArgumentException

时间:2014-12-15 22:02:27

标签: android google-fit

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

我该如何解决这个问题?任何帮助将不胜感激。

2 个答案:

答案 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)或类似的东西......