[英]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.