3

我正在使用此代码来尝试检索过去 14 小时内所做的步骤。

YApp myApp = (mYApp) ctx;
        mGoogleApiClient = myApp.getMyUser();
        mGoogleApiClient.reconnect();


        Calendar cal = Calendar.getInstance();
        Date now = new Date();
        cal.setTime(now);
        long endTime = cal.getTimeInMillis();
        cal.add(Calendar.HOUR_OF_DAY, -16);
        long startTime = cal.getTimeInMillis();

        PendingResult<DataReadResult> pendingResult =
                Fitness.HistoryApi.readData(mGoogleApiClient, new DataReadRequest.Builder()
                                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                                .bucketByTime(1, TimeUnit.DAYS)
                                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                                .build());

        DataReadResult dataReadResult = pendingResult.await();



        DataSet ds = dataReadResult.getDataSet(DataType.AGGREGATE_STEP_COUNT_DELTA);

我的 datareadresult 返回成功,但是当我尝试将结果读入数据集时出现此错误

java.lang.IllegalArgumentException: Attempting to read data for com.google.step_count.delta, which was not requested

我尝试了各种数据类型,但每次都收到相同的错误,我做错了什么?!

4

2 回答 2

9

对于其他对此感到沮丧的人:)

mYApp myApp = (mYApp) ctx;
        mGoogleApiClient = myApp.getMyUser();
        mGoogleApiClient.reconnect();


        Calendar cal = Calendar.getInstance();
        Date now = new Date();
        cal.setTime(now);
        long endTime = cal.getTimeInMillis();
        cal.add(Calendar.HOUR_OF_DAY, -12);
        long startTime = cal.getTimeInMillis();

        PendingResult<DataReadResult> pendingResult =
                Fitness.HistoryApi.readData(mGoogleApiClient, new DataReadRequest.Builder()
                                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                                .bucketByTime(1, TimeUnit.DAYS)
                                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                                .build());

        DataReadResult dataReadResult = pendingResult.await();



        if (dataReadResult.getBuckets().size() > 0) {
            Log.i(TAG, "Number of returned buckets of DataSets is: "
                    + dataReadResult.getBuckets().size());
            for (Bucket bucket : dataReadResult.getBuckets()) {
                List<DataSet> dataSets = bucket.getDataSets();
                for (DataSet dataSet : dataSets) {
                    Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
                    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);

                    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));
                        }
                    }
                }
            }
        } else if (dataReadResult.getDataSets().size() > 0) {
            Log.i(TAG, "Number of returned DataSets is: "
                    + dataReadResult.getDataSets().size());
            for (DataSet dataSet : dataReadResult.getDataSets()) {
                Log.i(TAG, "Data returned for Data type: " + dataSet.getDataType().getName());
                SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);

                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));
                    }
                }
            }
        }
于 2014-11-20T21:58:05.403 回答
4

只是为了澄清

PendingResult<DataReadResult> pendingResult =
            Fitness.HistoryApi.readData(mGoogleApiClient, new DataReadRequest.Builder()
                            .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                            .bucketByTime(1, TimeUnit.DAYS)
                            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                            .build());

使用存储桶列表返回 DataReadResult。

PendingResult<DataReadResult> pendingResult =
            Fitness.HistoryApi.readData(mGoogleApiClient, new DataReadRequest.Builder()
                            .read(DataType.TYPE_STEP_COUNT_DELTA)
                            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                            .build());

返回一个 DataReadResult 和一个可以被获取的 DataSet

dataReadResult.getDataSet(DataType.TYPE_STEP_COUNT_DELTA);
于 2014-11-27T09:27:28.860 回答