使用Android開源框架踩過的坑

讓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”,看來不能出了什麼問題都怪框架呀。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章