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

  1. // Serialize
  2. String userJSON = new Gson().toJson(user);
  3. // Deserialize
  4. 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 RetrofitInterface {
  2. // asynchronously with a callback
  3. @GET("/api/user")
  4. User getUser(@Query("user_id") int userId, Callback<User> callback);
  5. // synchronously
  6. @POST("/api/user/register")
  7. User registerUser(@Body User user);
  8. }
  9. // example
  10. RetrofitInterface retrofitInterface = new RestAdapter.Builder()
  11. .setServer(API.API_URL).build().create(RetrofitInterface.class);
  12. // fetch user with id 2048
  13. retrofitInterface.getUser(2048, new Callback<User>() {
  14. @Override
  15. public void success(User user, Response response) {
  16. }
  17. @Override
  18. public void failure(RetrofitError retrofitError) {
  19. }
  20. });

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

3. EVENTBUS

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

[js] view plaincopy

  1. public class NetworkStateReceiver extends BroadcastReceiver {
  2. // post event if there is no Internet connection
  3. public void onReceive(Context context, Intent intent) {
  4. super.onReceive(context, intent);
  5. if(intent.getExtras()!=null) {
  6. NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
  7. if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
  8. // there is Internet connection
  9. } else if(intent
  10. .getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
  11. // no Internet connection, send network state changed
  12. EventBus.getDefault().post(new NetworkStateChanged(false));
  13. }
  14. }
  15. // event
  16. public class NetworkStateChanged {
  17. private mIsInternetConnected;
  18. public NetworkStateChanged(boolean isInternetConnected) {
  19. this.mIsInternetConnected = isInternetConnected;
  20. }
  21. public boolean isInternetConnected() {
  22. return this.mIsInternetConnected;
  23. }
  24. }
  25. public class HomeActivity extends Activity {
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29. setContentView(R.layout.activity_main);
  30. EventBus.getDefault().register(this); // register EventBus
  31. }
  32. @Override
  33. protected void onDestroy() {
  34. super.onDestroy();
  35. EventBus.getDefault().unregister(this); // unregister EventBus
  36. }
  37. // method that will be called when someone posts an event NetworkStateChanged
  38. public void onEventMainThread(NetworkStateChanged event) {
  39. if (!event.isInternetConnected()) {
  40. Toast.makeText(this, "No Internet connection!", Toast.LENGTH_SHORT).show();
  41. }
  42. }
  43. }

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

5. UNIVERSAL IMAGE LOADER

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

[js] view plaincopy

  1. imageLoader.displayImage(imageUri, imageView);

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

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

时间: 2024-10-20 10:41:13

Android开发者必知的5个开源库的相关文章

[转]Android开发者必知的5个开源库

1. GSON Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.可用于将Java对象转换成对应的JSON表示,也可以将JSON字符串转换成一个等效的Java对象.如果与API打交道的话,那么这将会是你经常需要的东西.我们主要使用JSON的原因就是,相较XML,轻量级的JSON要简单的多. 2. RETROFIT 就如它网站上的介绍“Retrofit将你的REST API变为Java接口”一样,Retrofit把REST API返回的数据转化为Java对象方

Android开发者必知的开发资源

developer.android.com 官方开发者站点推荐资源 在动手编写第一个 Android 应用之前,用心读一读 Android Design 章节.尤其是下面的这些文章: Devices and Displays  (设备和显示) Touch Feedback(触摸反馈) Metrics and Grids (度量和网格) Iconography (图像研究) 同时也请下载 Downloads 部分的代码,这些代码囊括了 Android 图标和控件的设计模板,源文件,样式以及无样式图

移动前端开发者必知必会:移动设备概述

由于工作岗位的变换带来工作内容的变动,对于移动站点的前端开发已经疏远了好几个月,在这好几个月中有非常多新的东西出现,自己所掌握的一些东西也已经陈旧,所以选择了这本书<HTML5触摸界面设计与开发>来系统地学习和整理一下关于移动站点前端开发的知识体系. 之所以选择这本书,一是由于这本书比較新,2014年04月发的第一版.其二是由于作者Stephen Woods,这是Flickr团队的资深前端,Yahoo主页的Javascript技术平台正是出自此人之手. 接下来的时间里会陆续上传关于这本书学习的

每一位Android开发者应该知道的Android体系架构和开发库

英文原文:Android Architecture and Libraries Every Android Developer Should Know Android 的体系架构鼓励组件重用,允许开发者发布共享 Activity.Service 并且访问其他应用程序的数据,还可以根据开发者制定的安全限制进行管理.话虽如此,今天我将分享一些关于 Android 架构和开发库信息,供开发者创建下一个杀手级应用使用.准备好了吗?请继续下面的阅读! 不要被上面的图片吓到,你无需了解所有内容. Andro

Android权限大全(android开发必知)

android权限大全 Ctrl+F可快速查找 访问网络 android.permission.INTERNET,访问网络连接,可能产生GPRS流量 android.permission.CHANGE_WIFI_STATE  Wifi 改变状态 android.permission.ACCESS_WIFI_STATE WiFi 状态 android.permission.ACCESS_NETWORK_STATE 网络状态 录制视频 android.permission.CAMERA androi

五款Java开发者必知的错误跟踪工具

首先我们先看下什么是java? Java是由Sun Microsystems公司于 1995年5月推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的.1995年更名为Java,并重新设计用于开发Internet应用程序.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台.动态的We

Android开发必知--使用View.setId的正确姿势

这两天在写一个柱状图的自定义控件,用的直接继承ViewGroup的方式实现的,我们都知道,这是自定义控件里面最简单的一种了,有时间写个总结分享一下.这里我想说的重点是,在写这个自定义控件的时候遇到了个关于View.setId()小问题,在网上查了好多,有很多回答真是纯属扯淡,最后终于在stackoverflow上找到了零零碎碎的解决方案,stackoverflow真是一个好地方,几乎所有的问题都可以在上面找到解决方案.在此对这个问题整理记录下来,以便参考. 其实这个问题也应该是一个开发者必须提前

Android开发必知会的多进程详解

在计算机操作系统中,进程是进行资源分配和调度的基本单位.这对于基于Linux内核的Android系统也不例外.在Android的设计中,一个应用默认有一个(主)进程.但是我们通过配置可以实现一个应用对应多个进程. 本文将试图对于Android开发中应用多进程做一些整理总结. android:process · 应用实现多进程需要依赖于android:process这个属性 · 适用元素:Application, Activity, BroadcastReceiver, Service, Cont

Web开发者必知的10个职业常识

众所周知,Web开发行业的持续发展和需求的不断变化给开发人员提出了新的要求与挑战.就网站而言,用户期望网站内容能更加丰富多彩.页面更加美观并且能提供良好的用户体验.如果Web开发人员一直止步不前,那终将会被淘汰. 站的高看到远,希望下面这十条能帮助你在开发这条道路上走的更远. 树立好印象 无论在何种场合,好的印象往往能使人记忆深刻.作为开发人员,忠于自己很重要,但与客户交流过程中,切勿向客户表达一些不切实际的想法或提出一些过分的要求,有时候一个坏印象就会流失很多订单甚至会给你的名声和事业带来很大