这里,向大家介绍的是,这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。希望通过对它们的了解,能够对你的开发工作有所帮助。


1. GSON

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

[js]  view plain copy
  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 plain copy
  1. public interface RetrofitInterface {  
  2.   
  3.     // asynchronously with a callback  
  4.     @GET("/api/user")  
  5.     User getUser(@Query("user_id"int userId, Callback 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() {  
  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 plain copy
  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 plain copy
  1. user.save();  
可以轻易替代大型SQL语句:

[js]  view plain copy
  1. INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');  
获取所有用户的例子:

[js]  view plain copy
  1. List users = new Select().from(User.class).execute();  
而其对应的SQL语句是这样:

[js]  view plain copy
  1. SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;  

ActiveAndroid是移除大量,用于和数据库一同工作的样板代码的一个很好的方法。当然除此之外,还有其他开源解决方案,如GreenDAO和ORMLite。

5. UNIVERSAL IMAGE LOADER

UIL是是一个开源项目,其目的就是提供一个可重复使用的仪器为异步图像加载、缓存和显示。它的使用很简单:

[js]  view plain copy
  1. imageLoader.displayImage(imageUri, imageView);  

尽管Picasso拥有更好的API,但其缺乏自定义。而使用UIL构建器几乎可以配置所有(其中最重要的就是在抓取和缓存大型图片时,Picasso会失败)。

良好的开源库会让你的开发变得更简单更快速,而普遍流行的库通常测试良好且易用使用。在大多情况下,你可以很容易的将它们从Maven中导入到Android Studio项目里。将它们添加到相关性的build.gradle 文件。并且同步之后,在你的应用里将能够很好的实现它们。

[js]  view plain copy
  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'  

更多相关文章

  1. Android studio3.0 - 解决创建Java工程运行Java的main()入口函数
  2. Android绘制文本对象FontMetrics介绍及繪製文本
  3. Android 中的 Looper 对象
  4. 关于Android/java的复杂对象的深拷贝和浅拷贝
  5. Android Audio代码分析13 - AudioTrack::getPosition函数
  6. android 使用Intent传递对象 Serializable 或者 Parcelabel 《第
  7. Android 中调试手段 打印函数调用栈信息
  8. Android 利用JNI调用Android Java代码函数

随机推荐

  1. Android(安卓)Log升级版
  2. 对于Android代码保护过后软件的评估
  3. 开始今天的学习吧!Android开发Day1
  4. Android状态保存与恢复流程 完全解析
  5. 基于Android智能电视的应用程序的布局
  6. Android搜索实时显示功能实现
  7. Android的Google官方设计指南(上)
  8. Android缓存处理
  9. Android(安卓)对于MVVM模式的理解
  10. Android真机测试 连接本地服务器