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

    http://www.csdn.net/article/2014-06-16/2820224-top-5-android-libraries

    过去的时间里,Android开发逐步走向成熟。而无论出现多少Android相关的开发工具,我们每天使用的大量开源库却始终是不可或缺的。这里,向大家介绍的是,这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。

    过去的时间里,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 文件。并且同步之后,在你的应用里将能够很好的实现它们。

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/tmlee/p/4995302.html
Copyright © 2011-2022 走看看