方法一:因为后台返回的直接是个图片的流文件,所以你直接可以把请求的接口地址作为一个url,用imageloader进行加载。此时的地址是带参数的地址,如果需要拼接,需要手动拼接成一个字符串。
方法二:
从后台返回的图片流文件中读,拿到所有的字节,保存到字节数组中,然后在生成bitmap,然后在bitmap加载到imageview中。
InpuTStream inputstream = response.body().byteStream();
try { byte[] data=readStream(inputStream); if(data!=null){ final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); mHandler.post(new Runnable() { @Override public void run() { mImageInvocebarcode.setImageBitmap(bitmap); } }); } } catch (Exception e) { e.printStackTrace(); } inputStream.close();
/* * 得到图片字节流 数组大小 输入流转化为比特流 * */ public static byte[] readStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1){ outStream.write(buffer, 0, len); } outStream.close(); inStream.close(); return outStream.toByteArray(); }
如果产品需求不单单是把图片显示到屏幕上 展示给用户,还要保存到本地,我们只要操作直接数据就行,字节数组中保存了所有的
图片数据上面的readStream简单改一下: 注意问了避免重复,你的图片文件名做一个唯一的,再次进入已经保存的,又点击保存,
就删除原来的在更新为最新的。
public byte[] readStream(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); String path = Environment .getExternalStorageDirectory().getAbsolutePath()+"/XXXX/"; String pathurl = path+orderId+".jpg"; File file = new File(pathurl); if (file.exists()) { file.delete(); } FileOutputStream fos = new FileOutputStream(pathurl); byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1){ outStream.write(buffer, 0, len); fos.write(buffer,0,len); } outStream.close(); inStream.close(); return outStream.toByteArray(); }