在图像视图上设置位图 - 无法创建带有消息'unimplemented'的图像解码器



我有一个Spring Api,有两个方法:一个返回一个List<byte[]>作为JSONArray,另一个返回一个byte[]。

当我调用 Volley 多部分请求返回一个字节 [] 时,我可以在 ImageView 上设置它。

应用程序接口

@GetMapping(value = "/return", produces = MediaType.IMAGE_JPEG_VALUE)
public @ResponseBody byte[] getImage() throws IOException {     
File myFile = new File(xxxxxxxxxxxxxxxxxxxxxxx);
InputStream input = new FileInputStream(myFile);
System.out.println(input);      
return IOUtils.toByteArray(input);    
}

.APP

public void returnImage(final ImageView im) {
RequestQueue requestQueue = Volley.newRequestQueue(this);
BinaryRequest binaryRequest = new BinaryRequest(0, getString(R.string._url),
new Response.Listener<byte[]>() {
@Override
public void onResponse(byte[] response) {
im.setImageBitmap(BitmapFactory.decodeByteArray(response, 0, response.length));
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
requestQueue.add(binaryRequest);
}

当我调用JSONArrayRequest时,我无法获取字符串,转换为字节并在ImageView上设置。

API 上的代码基本相同,但返回不同。

示例返回:

[
{
"images": [],
"JSON": {
"XX":XX,
"XX":XX,
"XX":XX,
"XX":XX,
"XX":XX,
"XX":XX,
"XX":XX,
"XX":XX,
}
}
]

.APP

JSONArray jsa = jsonArrayResponse.getJSONObject(i).getJSONArray("images");
if(jsa != null){
for (int nbr = 0; nbr < jsa.length(); nbr++) {
byte[] bytes = jsa.get(nbr).toString().getBytes();
ivPhoto.setImageBitmap(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
return;
}
}

(我目前只收到一张图像(。

我得到了弦的回报并穿上了 https://codebeautify.org/base64-to-image-converter。 图像显示正确。

据我了解,您会收到 Base64 格式的图像。任何字符都可以表示为字节,但这并不意味着您可以将其视为图像。基本上发生的事情是,您尝试从 Base64 格式编码创建图像,而BitmapFactory.decodeByteArray需要

@param压缩图像数据的数据字节数组

必须先从 Base64 解码为字节,然后才能将字节解码到映像中。

byte[] decodedImageBytes = Base64.decode(encodedImage, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decodedImageBytes, 0, decodedImageBytes.length);

相关内容

  • 没有找到相关文章

最新更新