簡體   English   中英

Rxjava2,Retrofit2,將圖像下載為字節數組

[英]Rxjava2, Retrofit2, download image as byte array

我嘗試從網址下載幾個圖片。 在我將byte []解碼為位圖並將其設置為ImageView之后。 這段代碼非常完美。

Request request = new Request.Builder()
                            .url(imageUrl)
                            .build();

                    new OkHttpClient().newCall(request).enqueue(new Callback() {
                        @Override
                        public void onFailure(Call call, IOException e) {}

                        @Override
                        public void onResponse(Call call, Response response) throws IOException {
                            try {
                                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                                int current;
                                while ((current = response.body().byteStream().read()) != -1) {
                                    outputStream.write((byte) current);
                                }
                                byte[] array = outputStream.toByteArray();
                                ..........
                            }
                        }
                    });

但是,如果我使用rxjava2和retrofit2,它將無法解決問題。 字節數組帶有許多0值。

public interface ImageApi {

@GET
Observable<ResponseBody> requestImage(@Url String utl);}



Observable(imageUrl()).subscribe(new Observer<ResponseBody>() {
                        @Override
                        public void onSubscribe(@NonNull Disposable d) {}

                        @Override
                        public void onNext(@NonNull ResponseBody responseBody) {
                            try {
                                if (responseBody != null && responseBody.bytes() != null) {
                                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                                    int current;
                                    while ((current = responseBody.byteStream().read()) != -1) {
                                        outputStream.write((byte) current);
                                    }
                                    byte[] array = outputStream.toByteArray(); 
                                }
                        }

我做錯了什么? OkHttpClient請求和Retrofit2有什么區別?

ps我不需要使用Glide或Picasso。

responseBody.bytes() != null調用bytes()會讀取整個流,然后關閉響應。 之后,嘗試訪問responseBody.byteStream()總是返回封閉的流。

正確的代碼是:

byte[] array = responseBody.bytes();

由於responseBody不能為null(RxJava2禁止使用null),並且bytes()始終返回值或引發異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM