Java 获得;任务尚未完成错误“;使用google fit android api读取数据时

Java 获得;任务尚未完成错误“;使用google fit android api读取数据时,java,android,api,runtime-error,google-fit,Java,Android,Api,Runtime Error,Google Fit,我正在学习Android,我的任务是使用Google Fit steps API检索steps数据。然而,我不断得到“任务尚未完成”的错误。我不确定 这是我对该部分的代码: private List<Fitness> readHistoryDataFromGoogle() { DataReadRequest readRequest = createDataReadRequest(); Task<DataReadResponse> response = co

我正在学习Android,我的任务是使用Google Fit steps API检索steps数据。然而,我不断得到“任务尚未完成”的错误。我不确定

这是我对该部分的代码:

private List<Fitness> readHistoryDataFromGoogle() {
    DataReadRequest readRequest = createDataReadRequest();
    Task<DataReadResponse> response = com.google.android.gms.fitness.Fitness.getHistoryClient(this, GoogleSignIn.getLastSignedInAccount(this)).readData(readRequest);
    DataReadResponse responses  = response.getResult();
    List <Fitness> fitnessItems = parseFitness(responses);
    return fitnessItems;
}


private List<Fitness> parseFitness(DataReadResponse dataReadResponse) {
    List<com.example.mentalhealthapp.Fitness> fitnessItems = new ArrayList<>();
    for (Bucket bucket : dataReadResponse.getBuckets()) {
        for (DataSet set : bucket.getDataSets()) {
            for (DataPoint dataPoint : set.getDataPoints()) {
                int numSteps = dataPoint.getValue(Field.FIELD_STEPS).asInt();
                long startDateTime = dataPoint.getStartTime(TimeUnit.MILLISECONDS);
                long endDateTime = dataPoint.getEndTime(TimeUnit.MILLISECONDS);
                fitnessItems.add(new com.example.mentalhealthapp.Fitness(numSteps, startDateTime, endDateTime));
            }
        }
    }
    return fitnessItems;
}
私有列表readHistoryDataFromGoogle(){
DataReadRequest readRequest=createDataReadRequest();
Task response=com.google.android.gms.fitness.fitness.getHistoryClient(this,GoogleSignIn.GetLastSignedAccount(this)).readData(readRequest);
DataReadResponse responses=response.getResult();
列出fitnessItems=parseFitness(响应);
归还物品;
}
私有列表(DataReadResponse DataReadResponse){
List fitnessItems=new ArrayList();
for(Bucket:dataReadResponse.getbucket()){
对于(数据集集集:bucket.getDataSets()){
for(DataPoint DataPoint:set.getDataPoints()){
int numSteps=dataPoint.getValue(Field.Field_步骤).asInt();
long startDateTime=dataPoint.getStartTime(时间单位:毫秒);
long-endDateTime=dataPoint.getEndTime(时间单位为毫秒);
添加(new com.example.mentalhealthapp.Fitness(numSteps、startDateTime、endDateTime));
}
}
}
归还物品;
}

非常感谢你的帮助

您遇到了这个问题,因为API请求(服务调用)是
异步的
,它们不会立即完成并返回数据,您不能像其他代码那样逐行运行它们。您必须等待响应完成,然后才能访问它返回的数据。 从文档中可以看出,它是一个REST api:

简要查看文档
建议您在数据可用时查看此项以显示数据。

您遇到了这个问题,因为API请求(服务调用)是异步的,它们不会立即完成并返回数据,并且不能像其他代码那样逐行运行它们。您必须等待响应完成,然后才能访问它返回的数据。 从文档中可以看出,它是一个REST api:

简要查看文档
建议您在数据可用时查看此文件以显示数据。

@a\u local\u谢谢!起初,我试图包括onSuccessListener,但后来我意识到我无法检索任何结果,因为onSuccess()方法默认为void。我现在正在考虑其他方法来完成这一部分,包括RxJava。你能告诉我你将如何解决这个特殊的任务吗?非常感谢。是的,谢谢!我刚刚意识到我的愚蠢错误,我实际上忘了加上一个全局变量,这就是我无法检索数据的原因。考虑到我帮助了你一些类似的事情,请考虑一下我的问题和答案:D,我正在尝试为这些问题提出一个标准答案。感谢您的帮助:D@a_local_nobody非常感谢。起初,我试图包括onSuccessListener,但后来我意识到我无法检索任何结果,因为onSuccess()方法默认为void。我现在正在考虑其他方法来完成这一部分,包括RxJava。你能告诉我你将如何解决这个特殊的任务吗?非常感谢。是的,谢谢!我刚刚意识到我的愚蠢错误,我实际上忘了加上一个全局变量,这就是我无法检索数据的原因。考虑到我帮助了你一些类似的事情,请考虑一下我的问题和答案:D,我试图为这些问题提出一个标准答案,谢谢你的帮助:D。