当前位置: 首页 > 知识库问答 >
问题:

获取与Google Fit匹配的Google Fit数据

万俟穆冉
2023-03-14

我正在尝试从Google Fit获取逐日的步数数据,以显示在我的应用程序中。看起来我使用的代码是正确的,因为我得到了一些数据,但当我将我得到的数据与Google Fit应用程序进行比较时,这些数据与我得到的数据相去甚远。例如,在3月19日的Google Fit(网络和Android应用)中,它显示了2269个步骤。在我3月19日的应用程序中,它显示了64个步骤。我在应用程序中得到的数据总是低10的次方。我请求的数据是否不正确?下面的相关代码。

客户端生成器代码

GoogleApiClient.Builder builder = new GoogleApiClient.Builder(Main.instance)
                .addApi(Fitness.API)
                .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ));

请求生成器代码

private DataReadRequest queryFitnessData(long date)
{
    // Build a single day range.
    Calendar cal = Calendar.getInstance();
    cal.setTimeInMillis(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    cal.set(Calendar.MILLISECOND, 0);
    long startTime = cal.getTimeInMillis();
    cal.add(Calendar.DATE, 1);
    cal.add(Calendar.MILLISECOND, -1);
    long endTime = cal.getTimeInMillis();

    DataReadRequest readRequest = new DataReadRequest.Builder()
    .enableServerQueries()
    .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
    .bucketByTime(1, TimeUnit.DAYS)
    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
    .build();
    return readRequest;
}

执行查询

DataReadResult dataReadResult =
                        Fitness.HistoryApi.readData(googleClient, readRequest).await(1, TimeUnit.MINUTES);

if(dataReadResult.getBuckets().size() > 0)
{
    Bucket bucket = dataReadResult.getBuckets().get(0);
    for(DataSet dataSet : bucket.getDataSets())
    {
        for(DataPoint dp : dataSet.getDataPoints())
        {
            if(dp.getDataType().equals(DataType.TYPE_STEP_COUNT_DELTA))
            {
                for(Field field : dp.getDataType().getFields())
                {
                    if(field.getName().equals(Field.FIELD_STEPS.getName()))
                    {
                        if(listener != null)
                        {
                            listener.onStepCount(dp.getValue(field).asInt());
                        }
                    }
                }
            }
        }
    }
}

共有1个答案

朱典
2023-03-14

我可能会尝试的第一件事是摆脱enableServerQueries()并查询本地数据,这可能是一个同步时间问题。

除此之外,如果不看到DataReadResult中返回的其他数据,就很难判断。我很想放几个日志语句,看看发生了什么。

我的代码如下所示,它适用于我

for (Bucket bucket : dataReadResult.getBuckets()) {

    Log.d(TAG, "Bucket start time: " + bucket.getStartTime(TimeUnit.SECONDS));

    List<DataSet> dataSets = bucket.getDataSets();

    totalStepsValue = 0;

    for (DataSet dataSet : dataSets) {
        for (DataPoint dp : dataSet.getDataPoints()) {
            for (Field field : dp.getDataType().getFields()) {
                if (field.getName().equals("steps")) {
                    totalStepsValue += dp.getValue(field).asInt();
                } 
            }
        }
    }

    Log.d(TAG, "totalStepsValue: " + totalStepsValue);
}

同样,尝试使用30分钟桶获取一天的数据,看看是否得到了不同的结果。

 类似资料:
  • 我有一个如下的实体 错误消息实体如下所示 我使用hibernate标准从数据库中获取所有记录 @SuppressWarnings(“unchecked”) @Override 公共列表listTableOneEntites() { 标准条件=getSession().createCriteria(TableOneEntity.class); 返回(列表)标准。列表(); } 当我打印列表的大小时,

  • 我正在Node.js中编写一个RESTAPI,使用Mongoose访问MongoDB后端数据库。我想提供一个APIendpoint,它返回与特定variationStatus匹配的数组对象数量的计数。 这是我到目前为止得到的,但它给了我一个空洞的回答。。。 这是我的模型。。。 有人帮我吗? 谢谢

  • 在坚持最佳实践的同时,如何使用firestore进行一些关系查询,我面临着一点思维障碍。我正在创建一个feed功能,在这里你可以看到来自朋友的帖子。基本上,我的数据结构如下: 基本上,我正在进行一个查询,以获取friends_uid包含我的uid(本例中为uid1)的所有朋友。然后,一旦我将所有好友uid映射到一个数组,我想进行firestore查询,以获取Post_by字段等于该好友uid数组中

  • 如何在流中获得第一个匹配条件的元素?我试过了,但不起作用 如果条件不起作用,则在Stop以外的其他类中调用filter方法。

  • 我知道如何通过谓词查找列表的第一个元素:Java8通过谓词查找第一个元素 有没有一种简单的方法可以得到那个元素的索引? 编辑:链接的问题确实提供了答案,但我在搜索时找不到它,因为它的措辞。因此,我宁愿保留这个问题。

  • 我在Sybase数据库中有一个表,其中有一列is_req。它的数据类型是char(1)。它在我的hbm文件中的属性定义如下: 属性名称="is必需"列="is_req"类型="boolean" 现在,当我尝试使用标准/限制进行比较时,比如:,我得到以下例外: 如果我尝试做,我得到以下异常: com.sybase.jdbc2.jdbc.SybSQLException:不允许从数据类型'VARCHAR