谷歌健康 - 与谷歌Play服务的连接丢失

4
我从Google Fit API中得到了这个错误。它不是每次都会发生,但如果我遇到这个错误,那么在卸载应用程序之前我就无法获取我的步数数据。我已经正确地为我的应用程序配置了OAuth 2.0客户端身份验证。但有时仍然会出现此错误。
"com.google.android.gms.common.api.ApiException: 8: 连接到Google Play服务的连接已丢失"
当我从Google文档中调查它时,它告诉我: https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes public static final int INTERNAL_ERROR
正如文档所说,当我在onfailure方法中尝试连接Google Fit时,什么也没有发生,仍然面临着这个问题。
发生了内部错误。重试应该解决问题。 常量值:8
这里是代码块,有时onfailure方法会触发。
  DataReadRequest readRequest = new DataReadRequest.Builder()
                    .aggregate(DataType.TYPE_DISTANCE_DELTA, DataType.AGGREGATE_DISTANCE_DELTA)
                    .bucketByTime(1, TimeUnit.DAYS)
                    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                    .build();

            Fitness.getHistoryClient(MainActivity.activity, GoogleSignIn.getLastSignedInAccount(MainActivity.activity))
                    .readData(readRequest)
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Crashlytics.log(Log.ASSERT, "fail  :", e.toString());
                        }
                    })
                    .addOnSuccessListener(new OnSuccessListener<DataReadResponse>()
                    {
                        @Override
                        public void onSuccess(DataReadResponse dataReadResponse)
                        {
                            for (Bucket bucket : dataReadResponse.getBuckets())
                            {

                                for (DataSet dataSet : bucket.getDataSets())
                                {
                                    for (DataPoint dataPoint : dataSet.getDataPoints())
                                    {

                                        User.current().userFitnessData.totalDistance = dataPoint.getValue(dataPoint.getDataType().getFields().get(0)).asFloat();
                                    }
                                }
                            }

                            Crashlytics.log(Log.ASSERT, "Todays Steps", User.current().userFitnessData.getTodaysSteps() + "");
                            if (callBack != null)
                                callBack.onDistanceDataReceived();
                        }
                    });

API的错误是最糟糕的...我会尝试调查哪个HTTP请求正在被发布以及您获得了什么响应。 - deathangel908
2个回答

1

我不确定这是否有帮助,但在调用每个 Fitness API 之前,我总是检查这个函数。

public boolean isGoogleAccountSignIn(int requestCode){
    // permission you need
    FitnessOptions fitnessOptions = FitnessOptions.builder()
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_WRITE)
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_WRITE)
            .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_READ)
            .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_WRITE)
            .build();

    if (!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(context), fitnessOptions)) {
        GoogleSignIn.requestPermissions((Activity) context, requestCode, GoogleSignIn.getLastSignedInAccount(context), fitnessOptions);
        return false;
    } else {
        return true;
    }
}

在MainActivity中,我会像这样执行每个操作:
if (fitnessManager.isGoogleAccountSignIn(FitnessManager.REQUEST_CODE_ASK_ACCOUNT)) {
    // use Fitness Api you need
    fitnessManager.getDailyDataFromMobileInSegment(getLastWeekTime(), getTodayEndTime(), false);
}

我使用的play-services-fitnessplay-services-auth版本都超过11.6.0。

谢谢你的帮助,但我已经先检查了Google连接。 - aligur

0

对于拥有大量数据的用户,我遇到了相同的异常 - 所以我的想法是Google API中存在一些超时问题。将尝试按日块而不是按周块获取数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接