В хранилище Firebase 'getBytes' нет метода отмены - PullRequest
1 голос
/ 19 апреля 2020

Я загружаю файл json из хранилища, используя 'getBytes', но я хочу отменить загрузку, если это заняло более 10 секунд. метод 'getBytes' возвращает тип 'Task', у которого нет метода отмены, в отличие от 'getFile', который возвращает 'FileDownloadTask', у которого действительно есть метод отмены. Итак, есть ли способ отменить загрузку с помощью «getBytes», Могу ли я привести «Task» к «FileDownloadTask»?

Редактировать: Вот мой код:

mainStorageRef.child(UNIVERSITIES_DATA_STORAGE_PATH).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
        @Override
        public void onSuccess(byte[] bytes) {
            String jsonData = new String(bytes, StandardCharsets.UTF_8);
            ...
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            FastUtils.toastAndLogConnectionFailure(context, e);

        }
    });

1 Ответ

2 голосов
/ 20 апреля 2020

firebaser here

Насколько я понимаю из реализации (с закрытым исходным кодом), задание, которое вы получаете от getBytes(), это , а не a FileDownloadTask. Вместо этого это прямой Task<byte[]>, который создается TaskCompletionSource объектом . По этой причине он не может быть отменен.

Хотя ваш запрос кажется обоснованным, поэтому я бы рекомендовал подать запрос на добавление функции , чтобы инженерная группа узнала об этом.

На данный момент я бы рекомендовал использовать getStream() метод , который дает вам задачу StreamDownloadTask, которую можно отменить. Затем вы можете прочитать содержимое потока в ByteArrayOutputStream, что в значительной степени соответствует внутреннему методу getBytes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...