TransactionTooLargeException
означает, что обмен данными между службами / приложениями любого рода превысил допустимый верхний предел данных Android. Обычно ограничение размера составляет около 200 КБ, но оно может варьироваться (и я не уверен на 100%).
Решение состоит в том, чтобы разделить запрашиваемые данные, просматривая API Google Fit. Я думаю, вы можете попытаться получить меньше данных за один раз, установив более короткий диапазон времени в DataRequest
. В вашем случае ошибка говорит о том, что вы запрашиваете около 500 КБ данных, что означает, что вы можете попытаться сократить временной интервал вашего запроса примерно до половины.
Но даже тогда фактический размер данных может сильно различаться в зависимости от действий пользователя, и не рекомендуется многократно запрашивать слишком мало за раз, поэтому я думаю, что вы можете попытаться настроить таймер после вашего запроса, и если по прошествии некоторого времени данные не будут возвращены, уменьшите временной интервал запроса и повторите попытку (поскольку захват ошибки невозможен).
Другим подходом к обнаружению ошибки может быть чтение журналов в отдельном потоке, и если он перехватывает TransactionTooLargeException
, он вызывает обратный вызов и уведомляет вас об уменьшении временного интервала запроса. Вы можете захватить журналы как это:
try {
Process process = Runtime.getRuntime().exec("logcat *:S Fitness:W");//only show Google Fitness related logs
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
if(line.contains("Error delivering batch")){
//do your callback here
}
}
}
catch (IOException e) {}
И, за исключением исключения, я бы сказал, что это ошибка на стороне Google, так как они не рассмотрели эту ситуацию и не уловили это исключение, и это был бы действительный отчет об ошибке.