Glide:DataFetcher<InputStream> loadDatareturn 应该做什么?

Glide: What should DataFetcher<InputStream> loadData return?

我是 Glide 的新手,我自己的 ModelLoader 实现遇到了问题。

我以OkHttp Glide integration classes为基础

在我的 GlideModule 中,我调用:

registry.append(GlideUrl.class, InputStream.class, new TauaOkHttpLoader.Factory(applicationComponent.tauaOkHttpClient()));

其中 applicationComponent.tauaOkHttpClient() returns 一个有效的 OkHttpClient 和必要的 headers (我检查过了)。

然后,在我的 HttpLoader 中,我的实现与上面 link 中提供的 class 几乎相同。我创建它是为了使用我的 OkHttpStreamFetcher,我是这样得到结果的:

Request.Builder requestBuilder = new 
Request.Builder().url(url.toStringUrl());
    for (Map.Entry<String, String> headerEntry : url.getHeaders().entrySet()) {
        String key = headerEntry.getKey();
        requestBuilder.addHeader(key, headerEntry.getValue());
    }
    Request request = requestBuilder.build();

    call = client.newCall(request);
    call.enqueue(new okhttp3.Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            callback.onLoadFailed(e);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            responseBody = response.body();
            if (response.isSuccessful()) {
                String encodedImage = responseBody.string();
                long contentLength = encodedImage.length();
                ByteArrayInputStream inputStream =
                        new ByteArrayInputStream(Base64.decode(encodedImage, Base64.DEFAULT));
                stream = ContentLengthInputStream.obtain(inputStream, contentLength);
                callback.onDataReady(inputStream);
            } else {
                callback.onLoadFailed(new HttpException(response.message(), response.code()));
            }
        }
    });

即使我得到一个有效的编码字符串并正确创建 ByteArrayInputStream,它仍然会抛出错误。我已经调试了几次,它得到了正确的结果。我还尝试将我的提取器更改为 DataFetcher<byte[]>DataFetcher<Bitmap> 并附加它,但我的提取器甚至不会被调用。这是 logcat:

我做错了什么?

显然,我传递的 contentLength 不正确。给Base64.decode(encodedImage, Base64.DEFAULT)返回的数组长度赋值后,成功了!