У меня есть Spring Api с двумя методами: один из них возвращает список как JSONArray, и другой метод, который возвращает byte [].
Когда я вызываю многостраничный запрос Volley для возврата байта [], я могу установить его в ImageView.
API
@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, я не могу получить String, преобразовать в байт и установить 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;
}
}
(я получаю только одно изображение на данный момент).
Я получил возврат String и поставил https://codebeautify.org/base64-to-image-converter. Изображение отображается правильно.