我有一个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);