Как измерить прогресс загрузки огромной строки с Retrofit 2? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую Retrofit 2 и POST Вызов Rest для отправки некоторых данных в бэкэнд.Мой остальной интерфейс выглядит следующим образом:

void postSpecialData(String base64, Callback callback);

, тогда как мой Callback - это интерфейс Retrofit с:

  void onResponse(Call<T> call, Response<T> response);
  void onFailure(Call<T> call, Throwable t);

Я наконец вызываю:

getRestCommunicator().postSpecialData(encryptedBase64, new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                toast("Response code " + response.code());
            }

            @Override
            public void onFailure(Call call, Throwable t) {
                toast("Failure REST CALL");
            }
});

Переменная encryptedBase64ни файл, ни где-то хранится. Как я могу получить прогресс загрузки, чтобы он был виден, например, на индикаторе прогресса?

1 Ответ

0 голосов
/ 19 декабря 2018

Как и в этом примере : расширить RequestBody OkHttp3 и переписать writeTo(BufferedSink sink) для строки yourHugeString вместо файла:

@Override
    public void writeTo(BufferedSink sink) throws IOException {
        StringReader in = new StringReader(yourHugeString);
        char[] buffer = new char[2048]; // you can modifiy the buffer
        try {
            int read;
            while ((read = in.read(buffer)) != -1) {
                sink.write(new String(buffer).getBytes(), 0, read);
                mListener.onProgressUpdate(read);
            }
        } finally {
            in.close();
            mListener.onFinish(uploaded);
        }
}

, тогда как yourHugeString - это ваша строковая переменная сочень огромный строковый контент.Я преобразовал для write() в строку, потому что read() требует char[], тогда как write() -> byte[]

Затем просто измените ваш интерфейс:

void postSpecialData(SpecialRequestBody base64, Callback callback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...