让Android开发者事半功倍的除了AMap和Umeng等免费的开发者服务外还有GitHub上恒河沙数的开源框架,而Android Studio的Gradle机制使得引用Mevan资源更加便捷。然而因为大多数开源框架缺少中文文档,开发者一不留神就会踩到好多坑:


1、Universal-Image-Loader:莫名其妙的NullPointerException
Universal-Image-Loader(以下简称UID)是最早的Android开源框架之一,用来进行异步图像加载,缓存和显示。

很多新手初用UID,都会被提示NullPointerException,那是因为UID没有默认参数,你需要在Application的OnCreate()里面配置ImageLoaderConfiguration

 

2、Glide:CircleImageView不兼容
Glide是 Google 员工的开源项目,在2014年的Google I/O大会上被推荐使用,作为一个高效、开源、Android设备上的媒体管理框架,具有获取、解码和展示视频剧照、图片、动画等功能,比UID不知强到哪里去了。

但是项目迭代时把Picasso换成Glide的时候每个页面里的第一个CircleImageView第一次加载图片总是显示PlaceHolder。Glide加载圆形图片的方法很多,而CircleImageView不是其中之一。

 

3、Fresco:wrap_content居然等于0dp
Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。Fresco于2015年开源,开源之初大火了一把,很多跟风开发者都纷纷使用Fresco,仿佛不用Fresco就low人一等似得。

第一次用Fresco加载图片时照例设置宽高为wrap_content,没想到居然不显示图片,连SimpleDraweeView都不显示。实际情况是SimpleDraweeView已经被成功加载了,只不过高度为0dp而已,所以你自然就看不到了。

SimpleDraweeView的宽高至少其中之一的测量规格(MeasureSpec)模式为MeasureSpec.EXACTLY,换句话说,宽高至少其中之一必须被指定为match_parent或者固定宽高值(例如:100dp)。当宽高其中之一被指定为warp_content时,必须在代码中为控件设置宽高比(draweeView.setAspectRatio(0.5F);)。宽高不能都被设置为warp_content。

 

4、FastJson:这个bug已经改正了
FastJson是一个阿里巴巴推出的Json处理工具包,除了在处理数据量不大的Json时速度远大于Jackson和Gson之外,还有详细的中文文档。
然而FastJson的早期版本解析“不是Json的Json”(格式不正确的Json)时不会throw error——直接Crash。

5、AsyncHttpClient:不能在Thread里使用

AsyncHttpClient是自带异步加载的HTTP库,自带Async,在HttpClient时代一度流行过。
然而在Thread中使用AsyncHttpClient会抛出这样的异常:java.lang.IllegalArgumentException: Synchronous ResponseHandler used in AsyncHttpClient. You should create your response handler in a looper thread or use SyncHttpClient instead.
这是因为在AsyncHttpClient仅能用于UIThread,在Thread里应该用SyncHttpClient进行同步加载。

6、OKHttp:不能什么都怪框架
OKHttp是Google官方推荐的HTTP库,在Android 6.0版本删除了对HttpClient的支持后大放光芒。
前几天我用OKHttp上传图片的时候发现返回的不是Json,而是一个写着“The request sent by the client was syntactically incorrect”的400网页,我的Java同事坚信他的接口没问题,还说别的Android项目没问题,让我把代码copy过去用就行了,我找来他说的“没问题”的代码一看,居然是用HttoClient进行请求的,再一看这代码是2012年写的,这是让我把产品兼容到4.0以前吗?这个问题困扰了我几个小时,终于我在“没问题”的代码的一大堆“StringBuffer”中看出问题所在:原来正确的key是“file”而他给我的Api文档写的是“image”,看来不能出了什么问题都怪框架呀。