Я пытаюсь получить данные 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, работают нормально.