我正在尝试检索特定时间范围内的 Heart Bit 数据。我将一个时间范围分成几个较小的时间范围,例如每个一天。因此,如果我请求过去 5 天的数据,它将提供 5 个时间范围。所有有关时间范围的数据都存储在 GoogleFitReadRequestData 列表中。
public class GoogleFitReadRequestData {
private DataType dataType;
private long startTime;
private long endTime;
public GoogleFitReadRequestData(DataType dataType, long startTime, long endTime) {
this.dataType = dataType;
this.startTime = startTime;
this.endTime = endTime;
}
}
然后,我在循环中为这些数据范围创建请求。这是我的应用程序所做的简化示例。
public void stackOverflowRequestExample() {
initContext();
HistoricalClientHelper clientHelper = new HistoricalClientHelper();
List<GoogleFitReadRequestData> readRequestData = new ArrayList<>();
readRequestData.addAll(clientHelper.GetTimeBuckets(DataType.TYPE_HEART_RATE_BPM));
for (GoogleFitReadRequestData requestData : readRequestData) {
DataReadRequest.Builder readRequestBuilder = new DataReadRequest.Builder();
readRequestBuilder.read(requestData.getDataType());
readRequestBuilder.enableServerQueries();
readRequestBuilder.setTimeRange(requestData.getStartTime(), requestData.getEndTime(), TimeUnit.MILLISECONDS);
GoogleSignInAccount googleSignInAccount =
GoogleSignIn.getAccountForExtension(this.appContext, getFitnessOptions(requestData.getDataType()));
Fitness.getHistoryClient(this.appContext, googleSignInAccount)
.readData(readRequestBuilder.build())
.addOnSuccessListener(response -> {
clientHelper.ProcessDataSetList(response.getDataSets());
})
.addOnCanceledListener(() -> Log.w("Google Fit: ", "Reading request from Google Fit was cancelled"))
.addOnFailureListener(e -> Log.w("Google Fit: ", "There was an error reading data from Google Fit", e));
}
}
public static GoogleSignInOptionsExtension getFitnessOptions(DataType type) {
FitnessOptions.Builder optionsBuilder = FitnessOptions.builder();
optionsBuilder.addDataType(type, FitnessOptions.ACCESS_READ);
return optionsBuilder.build();
}
问题是其中一些返回响应(成功),而另一些则不返回任何响应。甚至没有取消或失败。有谁知道我做错了什么?
PS:我只注意到 TYPE_HEART_RATE_BPM 数据类型存在这个问题。其他的,比如 TYPE_STEP_COUNT_DELTA 工作得很好。