ライブラリ 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
}
}
}
});