Исключение хранилища Firebase и исключение Crashlytics не совпадают? - программирование
Подтвердить что ты не робот

Исключение хранилища Firebase и исключение Crashlytics не совпадают?

Я использую Firebase для загрузки файлов на Android. Вот мой код:

try {
    //.. Try to download file from Firebase
} catch(StorageException e) {
    if(e.getErrorCode() == StorageException.ERROR_RETRY_LIMIT_EXCEEDED) {
        //Ignore! Exception has occurred due to no Internet availability
    } else {
        //Other genuine failure, log it
       Crashlytics.logException(e);
    }
}

Теперь этот код не отправляет "Превышение срока действия операции". исключение. Однако в Crashlytics я все еще могу видеть, что это исключение сообщается.

Non-fatal Exception: com.google.firebase.storage.StorageException
The operation retry limit has been exceeded.

Caused by javax.net.ssl.SSLException
Read error: ssl=0x7188e1fe08: I/O error during system call, Software caused connection abort

Как это возможно? Я что-то пропустил?

Версия для Firebase: 16.0.1

4b9b3361

Ответ 1

В вашем сообщении не отображается код для загрузки файла. Я предполагаю, что у него есть слушатель завершения в Task. Возможно, исключение не распространяется на прилагаемый try-block и вам нужно обработать его в обратном вызове, как показано ниже:

storageRef.getFile(contentDir).addOnCompleteListener(
        new OnCompleteListener<FileDownloadTask.TaskSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<FileDownloadTask.TaskSnapshot> task) {
        if (task.isSuccessful()) {
            ...
        } else {
            StorageException se = (StorageException) task.getException();
            if (se.getErrorCode() == StorageException.ERROR_RETRY_LIMIT_EXCEEDED) {
                // Ignore
            } else {
                Crashlytics.logException(se);
            }
        }
    }
});

Если я ошибался в вашем коде загрузки, обновите свой пост, чтобы включить его.

Ответ 2

Там нет гарантии, что код ошибки StorageException будет установлен или правильно установлен во всех случаях для ошибок ERROR_RETRY_LIMIT_EXCEEDED и, скорее всего, ваш сбой не удастся из-за этого. В основном, у кого-то из кода Firebase есть ошибка, в которой они просто не могут правильно установить error_code (или задают его на другое значение), но сообщение об ошибке установлено правильно, поэтому при печати ошибки это выглядит так, как вы ожидали бы, кроме значение error_code. Если вы можете воспроизвести ошибку, установите точку прерывания или добавьте больше протоколирования значений исключений, чтобы вы могли видеть, что такое error_code, когда проверка завершилась с ошибкой. Попробуйте добавить еще одну проверку, которая анализирует сообщение об ошибке как резервное копирование для случаев, когда error_code является неправильным.