GoogleFit数据集没有数据点

时间:2018-11-03 19:57:59

标签: android

我正在尝试编写一个简单的应用程序,该应用程序可从Android上的GoogleFit中提取数据,但是即使我在Google Fit上手动添加了数据,我返回的数据集也没有任何数据点。 。我的代码如下,可以在下面找到。我正在Android模拟器上运行此程序,但给我的印象是我应该仍然能够提取数据,因为我在.enableServerQueries()中使用了DataReadRequest.Builder

MainActivity:

public void accessGoogleFit(GoogleSignInAccount account) {
    Fitness.getRecordingClient(this, account)
            .subscribe(DataType.TYPE_ACTIVITY_SAMPLES);

    Calendar cal = Calendar.getInstance();
    cal.setTime(new Date());
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.YEAR, -1);
    long startTime = cal.getTimeInMillis();

    GoogleApiClient client = new GoogleApiClient.Builder(this)
            .addApi(Fitness.HISTORY_API)
            .addScope(Fitness.SCOPE_ACTIVITY_READ)
            .build();
    client.connect();

    DataReadRequest readRequest = new DataReadRequest.Builder()
            .read(DataType.TYPE_STEP_COUNT_DELTA)
            .read(DataType.AGGREGATE_ACTIVITY_SUMMARY)
            .enableServerQueries()
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();

    Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this))
            .readData(readRequest)
            .addOnCompleteListener(new OnCompleteListener<DataReadResponse>() {
                @Override
                public void onComplete(@NonNull Task<DataReadResponse> task) {
                    System.out.println("Successful: " + task.isSuccessful());
                    if (task.isSuccessful()) {
                        List<DataSet> dataSets = task.getResult().getDataSets();
                        System.out.println("Size: " + dataSets.size());
                        for (DataSet set : dataSets) {
                            dumpDataSet(set);
                        }
                    }
                }
            });
}

private static void dumpDataSet(DataSet dataSet) {
    Log.i("GoogleFitData", "Data returned for Data type: " + dataSet.getDataType().getName());
    DateFormat dateFormat = getTimeInstance();

    for (DataPoint dp : dataSet.getDataPoints()) {
        Log.i("GoogleFitData", "Data point:");
        Log.i("GoogleFitData", "\tType: " + dp.getDataType().getName());
        Log.i("GoogleFitData", "\tStart: " + dateFormat.format(dp.getStartTime(TimeUnit.MILLISECONDS)));
        Log.i("GoogleFitData", "\tEnd: " + dateFormat.format(dp.getEndTime(TimeUnit.MILLISECONDS)));
        for (Field field : dp.getDataType().getFields()) {
            Log.i("GoogleFitData", "\tField: " + field.getName() + " Value: " + dp.getValue(field));
        }
    }
}

我在logcat中注意到,存在与找不到我的设备密钥文件有关的错误,但是我真的不知道如何解决此问题。我不确定这是否相关,因为GoogleFit请求成功返回,只是没有任何数据。我已经在Google Cloud Console中启用了GoogleFit API,并放入了我的应用指纹证书和软件包。

Logcat:

2018-11-03 15:17:31.749 26017-26446/com.google.android.gms.persistent W/GLSUser: [AppCertManager] IOException while requesting key: 
java.io.IOException: Invalid device key response.
    at hdw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):12)
    at hdw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):64)
    at hdw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):20)
    at hdu.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):4)
    at hdr.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):2)
    at hdp.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):10)
    at hdp.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):22)
    at pfn.d(:com.google.android.gms@12874026@12.8.74 (040700-204998136):3)
    at pgg.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):9)
    at pgg.b(:com.google.android.gms@12874026@12.8.74 (040700-204998136):7)
    at pgg.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):23)
    at pgg.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):33)
    at utl.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):36)
    at vvf.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):56)
    at vsz.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):206)
    at vpw.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):30)
    at vpu.a(:com.google.android.gms@12874026@12.8.74 (040700-204998136):107)
    at vpp.run(:com.google.android.gms@12874026@12.8.74 (040700-204998136):10)
    at pmz.run(:com.google.android.gms@12874026@12.8.74 (040700-204998136):28)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at ptb.run(:com.google.android.gms@12874026@12.8.74 (040700-204998136))
    at java.lang.Thread.run(Thread.java:761)
2018-11-03 15:17:31.749 26017-26446/com.google.android.gms.persistent W/GLSUser: [DeviceKeyStore] Cannot load key: Device key file not found.
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt: Could not set socket write timeout: java.lang.reflect.InvocationTargetException
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at java.lang.reflect.Method.invoke(Native Method)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at com.google.android.gms.org.conscrypt.Platform.setSocketWriteTimeout(:com.google.android.gms@12874026@12.8.74 (040700-204998136):13)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt: Caused by: android.system.ErrnoException: setsockopt failed: EBADF (Bad file descriptor)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.Posix.setsockoptTimeval(Native Method)
2018-11-03 15:17:31.854 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.ForwardingOs.setsockoptTimeval(ForwardingOs.java:157)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt: Could not set socket write timeout: java.lang.reflect.InvocationTargetException
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at java.lang.reflect.Method.invoke(Native Method)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at com.google.android.gms.org.conscrypt.Platform.setSocketWriteTimeout(:com.google.android.gms@12874026@12.8.74 (040700-204998136):13)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt: Caused by: android.system.ErrnoException: setsockopt failed: EBADF (Bad file descriptor)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.Posix.setsockoptTimeval(Native Method)
2018-11-03 15:17:31.915 26017-26757/com.google.android.gms.persistent W/Conscrypt:     at libcore.io.ForwardingOs.setsockoptTimeval(ForwardingOs.java:157)
2018-11-03 15:17:31.992 2776-2776/com.testdatapull.testdatapull I/System.out: Successful: true
2018-11-03 15:17:31.993 2776-2776/com.testdatapull.testdatapull I/System.out: Size: 2
2018-11-03 15:17:31.993 2776-2776/com.testdatapull.testdatapull I/GoogleFitData: Data returned for Data type: com.google.step_count.delta
2018-11-03 15:17:31.993 2776-2776/com.testdatapull.testdatapull I/GoogleFitData: Data returned for Data type: com.google.activity.summary

任何建议将不胜感激。

谢谢

0 个答案:

没有答案