zoukankan      html  css  js  c++  java
  • Android开发者必知的5个开源库

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


    1. GSON

    Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可用于将Java对象转换成对应的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是移除大量,用于和数据库一同工作的样板代码的一个很好的方法。当然除此之外,还有其他开源解决方案,如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. }  
  • 相关阅读:
    xml 创建 和 处理 及其修改
    shutil模块(高级的文件copy)
    shelve模块使用说明
    random内置模块
    time 时间内置模块3种形态的转化
    python模块说明
    Java控制并发线程数的Semaphore
    Java并发测试
    JAVA 模拟瞬间高并发
    java并发--流量控制demo
  • 原文地址:https://www.cnblogs.com/fxbbk/p/5370897.html
Copyright © 2011-2022 走看看