Android開發者必知的5個開源庫

過去的時間里,Android開發逐步走向成熟,一個個與Android相關的開發工具也層出不窮。不過,在面對各種新鮮事物時,不要忘了那些我們每天使用的大量開源庫。在這里,向大家介紹的就是,在這個任勞任怨的大家庭中,最受開發者喜愛的五個Android庫。希望通過對它們的了解,能夠對你的開發工作有所幫助。

1. GSON

Gson是Google提供的用來在Java對象和JSON數據之間進行映射的Java類庫??捎糜誚獼ava對象轉換成對應的JSON表示,也可以將JSON字符串轉換成一個等效的Java對象。如果與API打交道的話,那么這將會是你經常需要的東西。我們主要使用JSON的原因就是,相較XML,輕量級的JSON要簡單的多。


[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. // Serialize   

  2. String userJSON = new Gson().toJson(user);  

  3.   

  4. // Deserialize  

  5. User user = new Gson().fromJson(userJSON, User.class);  

2. RETROFIT


就如它網站上的介紹“Retrofit將你的REST API變為Java接口”一樣,Retrofit把REST API返回的數據轉化為Java對象方便操作,對于在項目中組織API調用,是一個不錯的解決方案。其請求方法和相對URL都帶有注解,使得代碼變得更加簡潔。使用注解,你可以很容易的添加一個請求主體,操縱URL或頭文件,并添加查詢參數。除此之外,每個函數可以定義為同步或異步,具有返回值的函數為同步執行,而異步函數沒有返回值且最后一個參數為Callback對象。


[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. public interface RetrofitInterface {  

  2.   

  3.     // asynchronously with a callback  

  4.     @GET("/api/user")  

  5.     User getUser(@Query("user_id"int userId, Callback<User> callback);  

  6.   

  7.     // synchronously  

  8.     @POST("/api/user/register")  

  9.     User registerUser(@Body User user);  

  10. }  

  11.   

  12.   

  13. // example  

  14. RetrofitInterface retrofitInterface = new RestAdapter.Builder()  

  15.             .setServer(API.API_URL).build().create(RetrofitInterface.class);  

  16.   

  17. // fetch user with id 2048  

  18. retrofitInterface.getUser(2048, new Callback<User>() {  

  19.     @Override  

  20.     public void success(User user, Response response) {  

  21.   

  22.     }  

  23.   

  24.     @Override  

  25.     public void failure(RetrofitError retrofitError) {  

  26.   

  27.     }  

  28. });  

Retrofit默認情況下使用的是GSON,所以無需自定義解析,同時還支持其他轉換器。


3. EVENTBUS

EventBus是用于簡化應用中各個部件之間通信的一個庫。比如從一個Activity發送消息到一個正在運行的服務,亦或是片段之間簡單的互動。而下面使用的示例,就是如果網絡連接丟失,該如何通知一個活動:


[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. public class NetworkStateReceiver extends BroadcastReceiver {  

  2.   

  3.     // post event if there is no Internet connection  

  4.     public void onReceive(Context context, Intent intent) {  

  5.         super.onReceive(context, intent);  

  6.         if(intent.getExtras()!=null) {  

  7.             NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);  

  8.             if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {  

  9.                 // there is Internet connection  

  10.             } else if(intent  

  11.                 .getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {  

  12.                 // no Internet connection, send network state changed  

  13.                 EventBus.getDefault().post(new NetworkStateChanged(false));  

  14.             }  

  15. }  

  16.   

  17. // event  

  18. public class NetworkStateChanged {  

  19.   

  20.     private mIsInternetConnected;  

  21.   

  22.     public NetworkStateChanged(boolean isInternetConnected) {  

  23.         this.mIsInternetConnected = isInternetConnected;  

  24.     }  

  25.   

  26.     public boolean isInternetConnected() {  

  27.         return this.mIsInternetConnected;  

  28.     }  

  29. }  

  30.   

  31. public class HomeActivity extends Activity {  

  32.   

  33.     @Override  

  34.     protected void onCreate(Bundle savedInstanceState) {  

  35.         super.onCreate(savedInstanceState);  

  36.         setContentView(R.layout.activity_main);  

  37.   

  38.         EventBus.getDefault().register(this); // register EventBus  

  39.     }  

  40.   

  41.     @Override  

  42.     protected void onDestroy() {  

  43.         super.onDestroy();  

  44.         EventBus.getDefault().unregister(this); // unregister EventBus  

  45.     }  

  46.   

  47.     // method that will be called when someone posts an event NetworkStateChanged  

  48.     public void onEventMainThread(NetworkStateChanged event) {  

  49.         if (!event.isInternetConnected()) {  

  50.             Toast.makeText(this"No Internet connection!", Toast.LENGTH_SHORT).show();  

  51.         }  

  52.     }  

  53.   

  54. }  

4. ACTIVEANDROID


ActiveAndroid算是一個輕量級的ORM(對象關系映射),讓你無需編寫一個單獨的SQL語句,就可以保存和檢索SQLite數據庫記錄。每個數據庫記錄都被包裹整齊地歸為一類,如delete()和save()的方法。

擴展ActiveAndroid Model的對象能夠保存在數據庫里,如:


[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. user.save();  

可以輕易替代大型SQL語句:



[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');  

獲取所有用戶的例子:



[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. List<User> users = new Select().from(User.class).execute();  

而其對應的SQL語句是這樣:



[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;  

ActiveAndroid是移除大量,用于和數據庫一同工作的樣板代碼的一個很好的方法。當然除此之外,還有其他開源解決方案,如GreenDAO和ORMLite。


5. UNIVERSAL IMAGE LOADER

UIL是是一個開源項目,其目的就是提供一個可重復使用的儀器為異步圖像加載、緩存和顯示。它的使用很簡單:


[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. imageLoader.displayImage(imageUri, imageView);  

盡管Picasso擁有更好的API,但其缺乏自定義。而使用UIL構建器幾乎可以配置所有(其中最重要的就是在抓取和緩存大型圖片時,Picasso會失敗)。


良好的開源庫會讓你的開發變得更簡單更快速,而普遍流行的庫通常測試良好且易用使用。在大多情況下,你可以很容易的將它們從Maven中導入到Android Studio項目里。將它們添加到相關性的build.gradle 文件。并且同步之后,在你的應用里將能夠很好的實現它們。

[js] view plaincopy在CODE上查看代碼片派生到我的代碼片

  1. dependencies {  

  2.     compile 'com.google.code.gson:gson:2.2.4'  

  3.     compile 'com.squareup.okhttp:okhttp:1.3.0'  

  4.     compile 'com.squareup.retrofit:retrofit:1.3.0'  

  5.     compile 'de.greenrobot:eventbus:2.2.+'  

  6.     compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1'  

  7. }  


作者:劉璐璐

來源:CSDN


上一篇: Android開發人員應避免的10個誤區

下一篇: 一路走來,從自學到工作這一年我學到了什么?

分享到: 更多
如何玩福彩快三稳赚 重庆时时彩每天规律 2018nba挣钱最多排名 北京快3稳赚和值 pk10手机直播视频直播 重庆正规大小单双计划 乐翻二人麻将苹果版 巴恩斯 球棎比分 爱彩乐彩票官网 玩龙虎赌博的技巧 重庆时时开奖结果查询 助赢极速赛车计划软件 内蒙古时时规则介绍 二分彩技巧稳赚保本玩法 3d包胆能中多钱