它是用于加载图像和获取http状态的Android库吗?
我有一个应用程序,可以使用库离子()。问题是我意识到当加载失败时,我需要获取http状态 我有一个rest服务根据出错的地方返回不同的状态,并且需要在应用程序中有不同的逻辑 这是rest服务的代码:它是用于加载图像和获取http状态的Android库吗?,android,rest,android-imageview,android-image,ion,Android,Rest,Android Imageview,Android Image,Ion,我有一个应用程序,可以使用库离子()。问题是我意识到当加载失败时,我需要获取http状态 我有一个rest服务根据出错的地方返回不同的状态,并且需要在应用程序中有不同的逻辑 这是rest服务的代码: @GET @Path("/damages/image/get") @Produces("image/jpeg") @Override public Response getImage() { byte[] byteImage; try { //Getting the
@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.
}
});
...
事实上,还有另外一个图书馆。我已用于图像加载。它比较简单,有很多实现方法。DisplayImageOptions配置类中有一个方法
.showImageOnFail(R.drawable.ic\u error)
。我没有浏览所有库,但我想您可以看到配置类如何影响这一点,以及如何调用showmageonfail
函数,并重新使用相同的逻辑添加您自己的或重写某些方法以获取您的状态。这就是我最初想到这个图书馆可以帮助你的原因 事实上,还有另一个用于此的库。我已用于图像加载。它比较简单,有很多实现方法。DisplayImageOptions配置类中有一个方法.showImageOnFail(R.drawable.ic\u error)
。我没有浏览所有库,但我想您可以看到配置类如何影响这一点,以及如何调用showmageonfail
函数,并重新使用相同的逻辑添加您自己的或重写某些方法以获取您的状态。这就是我最初想到这个图书馆可以帮助你的原因 使用该库或任何其他异步图像加载库都无法做到这一点。这不是一个常见的用例。您必须查看并修改代码,以读取状态代码并返回它。使用该库或任何其他异步映像加载库都无法做到这一点。这不是一个常见的用例。您必须查看并修改代码以读取状态代码并将其返回。调用setCallback()后,使用.withResponse()将结果包装到响应中。该响应将来将允许您访问头、响应代码等
演示如何使用字符串结果执行此操作的示例。。。同样的概念也适用于字节数组
Ion.with(getContext())
.加载(“http://example.com/test.txt")
.asString()
.withResponse()
.setCallback(新的FutureCallback(){
@凌驾
未完成公共无效(异常e,响应结果){
//打印响应代码,即200
System.out.println(result.getHeaders().getResponseCode());
//打印下载的字符串
System.out.println(result.getResult());
}
});
请注意,这在ImageView加载中是不可能的,因为ImageView加载可能根本不会影响网络,这是由于缓存命中等原因。在调用setCallback()后,使用.withResponse()将结果包装到响应中。该响应将来将允许您访问头、响应代码等
演示如何使用字符串结果执行此操作的示例。。。同样的概念也适用于字节数组
Ion.with(getContext())
.加载(“http://example.com/test.txt")
.asString()
.withResponse()
.setCallback(新的FutureCallback(){
@凌驾
未完成公共无效(异常e,响应结果){
//打印响应代码,即200
System.out.println(result.getHeaders().getResponseCode());
//打印下载的字符串
System.out.println(result.getResult());
}
});
请注意,这在ImageView加载中是不可能的,因为ImageView加载可能根本不会影响网络,这是由于缓存命中等原因。请解释您的库如何解决OP的问题。它不是我的库:)我刚刚使用过它。它更简单,因为您可以用一行代码加载图像。他的部分问题是:关于我如何解决这个问题,你有什么建议吗?另一个lib或者我只是做错了吗?“你有什么关于我如何解决这个问题的提示吗?”--问题是获取失败图像下载的HTTP状态(“加载失败时获取HTTP状态”)。请解释您链接到的库如何解决此问题。如果图书馆没有解决这个问题,那么你的答案就不能回答OP的问题。所以我应该在评论中发布提示?你应该点击答案中的“编辑”链接,然后编辑您的答案,解释您链接到的库如何允许开发人员获取失败下载的HTTP状态。请解释您的库如何解决OP的问题。它不是我的库:)我刚刚使用过它。它更简单,因为您可以用一行代码加载图像。他的部分问题是:关于我如何解决这个问题,你有什么建议吗?另一个lib或者我只是做错了吗?“你有什么关于我如何解决这个问题的提示吗?”--问题是获取失败图像下载的HTTP状态(“加载失败时获取HTTP状态”)。请解释您链接到的库如何解决此问题。如果库没有解决此问题,则您的答案无法回答OP的问题。因此,我应该在评论中发布提示?您应该单击答案中的“编辑”链接,然后编辑您的答案,以解释您链接到的库如何允许开发人员获取失败下载的HTTP状态。withResponse提供标题,等等。我不知道你是否正确地认为我使用的库不可能做到这一点,但用基本库重写它很容易。谢谢withResponse为您提供标题等。我不知道您是否正确地认为我使用的库不可能做到这一点,但使用基本库重写它很容易。谢谢我无法用这种方式解决它。我遇到了一个异常:java.lang.NoSuchMethodError:com.koushikdutta.ion.gson.GsonSerializerOh,只需将gson添加为
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
}
});
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
}
}
}
});
Ion.with(getContext())
.load("http://example.com/test.txt")
.asString()
.withResponse()
.setCallback(new FutureCallback<Response<String>>() {
@Override
public void onCompleted(Exception e, Response<String> result) {
// print the response code, ie, 200
System.out.println(result.getHeaders().getResponseCode());
// print the String that was downloaded
System.out.println(result.getResult());
}
});