我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。希望通过对它们的了解,能够对你的开发工作有所帮助。

1. GSON

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可用于将Java对象转换成对应的JSON表示,也可以将JSON字符串转换成一个等效的Java对象。如果与API打交道的话,那么这将会是你经常需要的东西。我们主要使用JSON的原因就是,相较XML,轻量级的JSON要简单的多。

[js]view plaincopy
1. // Serialize 
2. String userJSON = new
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
1. public interface
2.   
3. // asynchronously with a callback
4. "/api/user")  
5. "user_id") int
6.   
7. // synchronously
8. "/api/user/register")  
9.     User registerUser(@Body User user);  
10. }  
11.   
12.   
13. // example
14. RetrofitInterface retrofitInterface = new
15. class);  
16.   
17. // fetch user with id 2048
18. retrofitInterface.getUser(2048, new
19.     @Override  
20. public void
21.   
22.     }  
23.   
24.     @Override  
25. public void
26.   
27.     }  
28. });

Retrofit默认情况下使用的是GSON,所以无需自定义解析,同时还支持其他转换器。

3. EVENTBUS

EventBus是用于简化应用中各个部件之间通信的一个库。比如从一个Activity发送消息到一个正在运行的服务,亦或是片段之间简单的互动。而下面使用的示例,就是如果网络连接丢失,该如何通知一个活动:

[js]view plaincopy
1. public class NetworkStateReceiver extends
2.   
3. // post event if there is no Internet connection
4. public void
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
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. new NetworkStateChanged(false));  
14.             }  
15. }  
16.   
17. // event
18. public class
19.   
20. private
21.   
22. public NetworkStateChanged(boolean
23. this.mIsInternetConnected = isInternetConnected;  
24.     }  
25.   
26. public boolean
27. return this.mIsInternetConnected;  
28.     }  
29. }  
30.   
31. public class HomeActivity extends
32.   
33.     @Override  
34. protected void
35. super.onCreate(savedInstanceState);  
36.         setContentView(R.layout.activity_main);  
37.   
38. this); // register EventBus
39.     }  
40.   
41.     @Override  
42. protected void
43. super.onDestroy();  
44. this); // unregister EventBus
45.     }  
46.   
47. // method that will be called when someone posts an event NetworkStateChanged
48. public void
49. if
50. 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
1. user.save();  
可以轻易替代大型SQL语句:
 
 
[js]view plaincopy
1. INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');  
获取所有用户的例子:
 
 
[js]view plaincopy
1. List<User> users = new Select().from(User.class).execute();  
而其对应的SQL语句是这样:
 
 
[js]view plaincopy
1. SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;  
ActiveAndroid是移除大量,用于和数据库一同工作的样板代码的一个很好的方法。当然除此之外,还有其他开源解决方案,如GreenDAO和ORMLite。
 
5. UNIVERSAL IMAGE LOADER

UIL是是一个开源项目,其目的就是提供一个可重