我有一个应用程序,我在其中使用 Ion 库(https://github.com/koush/ion)。问题是我意识到我需要在加载失败时获取 http-status。
我有一个休息服务根据问题返回不同的状态,并且在应用程序中也需要有不同的逻辑。
这是休息服务的代码:
@GET
@Path("/damages/image/get")
@Produces("image/jpeg")
@Override
public Response getImage() {
byte[] byteImage;
try {
//Getting the image here
...
} catch (ExceptionTypeA e) {
return Response.status(204).entity(null).build();
} catch (ExceptionTypeB e) {
return Response.status(503).entity(null).build();
}
return Response.ok(image).build();
}
这是我用来获取图像的代码:
...
Ion.with(imageView)
.error(R.drawable.ic_menu_camera)
.load(imageUrl).setCallback(new FutureCallback<ImageView>() {
@Override
public void onCompleted(Exception ex, ImageView iv) {
//I need to get the HTTP-status here.
}
});
...
我也试过这个:
Ion
.with(getApplicationContext())
.load(imageUrl)
.as(new TypeToken<byte[]>(){})
.withResponse()
.setCallback(new FutureCallback<Response<byte[]>>() {
@Override
public void onCompleted(Exception e,
Response<Byte[]> result) {
//I never get here
}
});
使用上面的代码,我得到以下异常的错误: java.lang.NoSuchMethodError: com.koushikdutta.ion.gson.GsonSerializer
你对我如何解决这个问题有什么建议吗?另一个库还是我做错了?
解决方案:
我的解决方案是用AndroidAsync库重写它。这是代码:
AsyncHttpClient.getDefaultInstance().getByteBufferList(imageUrl, new
AsyncHttpClient.DownloadCallback() {
@Override
public void onCompleted(Exception e, AsyncHttpResponse source,
ByteBufferList result) {
int httpStatus = source.getHeaders().getHeaders().getResponseCode();
byte[] byteImage = result.getAllByteArray();
Bitmap bitmapImage = BitmapFactory.decodeByteArray(byteImage, 0,
byteImage.length);
theImageViewIWantToSet.setImageBitmap(bitmapImage);
if(httpStatus == 200) {
//Do something
} else {
//Do something else
}
}
}
});