最近做一个项目,在公司开发完毕之后,客户测试中总是出问题,而我们的手机确测不出来问题,后来了解到客户使用的手机是小米4,于是公司又买了台小米4进行测试。(这里不是为了黑小米)确实有问题,期初logcat调到error时找不到错误,后来换到warm才发现错误信息。具体信息如下:
错误是DataFormatException:stream error。因为这里使用了GzipUtils 方法对信息流进行压缩。但是其他手机没有问题,后来对比了下发现,小米4的系统是android4.4.4,所以可能是android系统对于方法不支持。代码很简单,如下:
ByteArrayOutputStream bytes=new ByteArrayOutputStream();
GZIPOutputStream gzip=new GZIPOutputStream(bytes);
GarUtils.transfer(parent.getContent(),gzip);
try{
gzip.finish();
gzip.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
gzip.close();
}
网上查了 大多是说流的开启和关闭顺序有可能存在冲突,但是看了半天源码,发现 GZIPOutputStream 的源码说明里只有 finish()方法和write方法 而close()和flush()是父类的方法,所以尝试着去掉了 flush()方法 考虑到流到操作最后都要关闭 所以没有去掉close()方法 。
再次运行 搞定!
个人也是android 菜鸟 。希望大家有什么好的方法 多多指教 目前不确定其他android 版本是否存在同样问题。