Android开发者必知的5个开源库

摘要:过去的时间里,Android开发逐步走向成熟。而不管出现多少Android相关的开发工具,咱们天天使用的大量开源库却始终是不可或缺的。这里,向你们介绍的是,这个不辞辛苦的你们庭中,最受开发者喜好的五个Android库。html

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各类新鲜事物时,不要忘了那些咱们天天使用的大量开源库。在这里,向你们介绍的就是,在这个不辞辛苦的你们庭中,最受开发者喜好的五个Android库。但愿经过对它们的了解,可以对你的开发工做有所帮助。java


1. GSONandroid

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

[js] view plaincopy在CODE上查看代码片派生到个人代码片github

  1. // Serialize   sql

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

  3.   

  4. // Deserialize  api

  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是移除大量,用于和数据库一同工做的样板代码的一个很好的方法。固然除此以外,还有其余开源解决方案,如GreenDAOORMLite

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. }  

(编译/刘璐璐 责编/唐小引)

文章来源:infinum

本文为CSDN编译整理,未经容许不得转载,如需转载请联系market#csdn.net(#换成@)

相关文章
相关标签/搜索