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

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


1. GSON

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

// Serialize
String userJSON = new Gson().toJson(user); // Deserialize
User user = new Gson().fromJson(userJSON, User.class);

2. RETROFIT

就如它网站上的介绍“Retrofit将你的REST API变为Java接口”一样,Retrofit把REST API返回的数据转化为Java对象方便操作,对于在项目中组织API调用,是一个不错的解决方案。其请求方法和相对URL都带有注解,使得代码变得更加简洁。使用注解,你可以很容易的添加一个请求主体,操纵URL或头文件,并添加查询参数。除此之外,每个函数可以定义为同步或异步,具有返回值的函数为同步执行,而异步函数没有返回值且最后一个参数为Callback对象。

public interface RetrofitInterface {

    // asynchronously with a callback
@GET("/api/user")
User getUser(@Query("user_id") int userId, Callback<User> callback); // synchronously
@POST("/api/user/register")
User registerUser(@Body User user);
} // example
RetrofitInterface retrofitInterface = new RestAdapter.Builder()
.setServer(API.API_URL).build().create(RetrofitInterface.class); // fetch user with id 2048
retrofitInterface.getUser(2048, new Callback<User>() {
@Override
public void success(User user, Response response) { } @Override
public void failure(RetrofitError retrofitError) { }
});

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

3. EVENTBUS

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

public class NetworkStateReceiver extends BroadcastReceiver {

    // post event if there is no Internet connection
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getExtras()!=null) {
NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);
if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {
// there is Internet connection
} else if(intent
.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
// no Internet connection, send network state changed
EventBus.getDefault().post(new NetworkStateChanged(false));
}
} // event
public class NetworkStateChanged { private mIsInternetConnected; public NetworkStateChanged(boolean isInternetConnected) {
this.mIsInternetConnected = isInternetConnected;
} public boolean isInternetConnected() {
return this.mIsInternetConnected;
}
} public class HomeActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); EventBus.getDefault().register(this); // register EventBus
} @Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this); // unregister EventBus
} // method that will be called when someone posts an event NetworkStateChanged
public void onEventMainThread(NetworkStateChanged event) {
if (!event.isInternetConnected()) {
Toast.makeText(this, "No Internet connection!", Toast.LENGTH_SHORT).show();
}
} }

4. ACTIVEANDROID

ActiveAndroid算是一个轻量级的ORM(对象关系映射),让你无需编写一个单独的SQL语句,就可以保存和检索SQLite数据库记录。每个数据库记录都被包裹整齐地归为一类,如delete()和save()的方法。

扩展ActiveAndroid Model的对象能够保存在数据库里,如:

user.save();

可以轻易替代大型SQL语句:

INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');

获取所有用户的例子:

List<User> users = new Select().from(User.class).execute();

而其对应的SQL语句是这样:

SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;

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

5. UNIVERSAL IMAGE LOADER

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

imageLoader.displayImage(imageUri, imageView);

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

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

dependencies {
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.squareup.okhttp:okhttp:1.3.0'
compile 'com.squareup.retrofit:retrofit:1.3.0'
compile 'de.greenrobot:eventbus:2.2.+'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1'
}

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

  1. Android 开发者必知的开发资源

    英文原文:Bongzimo  翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Androi ...

  2. Android开发者必知的开发资源

    推荐书籍 我推荐下面两本书: The Busy Coder’s Guide to Android Development <The Busy Coder’s Guide to Android D ...

  3. (转载)Android开发者必知的开发资源

    (转载)http://www.importnew.com/3988.html 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮.如果您是一位2013 ...

  4. [转][赞]Android开发者必知的开发资源

    英文原文:Bongzimo  翻译: ImportNew-黄小非 随着Android平台市场份额的持续猛增 ,越来越多的开发者开始投入Android应用程序的开发大潮.如果您是一位2013年刚刚入行的 ...

  5. Android 开发者必知必会的权限管理知识

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/OQRHEufCUXBA3d3DMZXMKQ 导语 本 ...

  6. 开发者必知的8款App快速开发工具

    开发者必知的8款App快速开发工具 “我有一个好创意,就差一个CTO……” “原生APP开发难度大,周期长,成本高,还没上线市场已经被占领了.” “APP版本迭代更新,都是企业的一道难关,没有一个一劳 ...

  7. 打造高质量Android应用:Android开发必知的50个诀窍

    打造高质量Android应用:Android开发必知的50个诀窍

  8. .Net开发者必知的技术类RSS订阅指南

    目录 RSS订阅资源 .Net基金会 MSDN中文版 杂志 微软 Github 系列 微软DevBlog系列 InfoQ中文版系列 如何找到大佬的 Twitter/Youtube/Stackoverf ...

  9. 开发者必知的8款App快速开发工具开发者必知的8款App快速开发工具

    "我有一个好创意,就差一个CTO……" "原生APP开发难度大,周期长,成本高,还没上线市场已经被占领了." "APP版本迭代更新,都是企业的一道难关 ...

随机推荐

  1. Druid对比Vertica

    怎么比较Druid和Vertica? Vertica 类似与之前介绍的ParAccel/Redshift(Druid-vs-Redshift). 不是实时注入数据: 提供SQL的全部语法支持 另外一个 ...

  2. 【日志处理、监控ELK、Kafka、Flume等相关资料】

    服务介绍 随着实时分析技术的发展及成本的降低,用户已经不仅仅满足于离线分析.目前我们服务的用户包括微博,微盘,云存储,弹性计算平台等十多个部门的多个产品的日志搜索分析业务,每天处理约32亿条(2TB) ...

  3. Java线程:概念与原理(转)

    一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...

  4. HTML5 Canvas 绘制库存变化折线

    <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type&quo ...

  5. Django——QuerySets酷毙了!

    Django的QuerySets酷毙了! 在本文中我将解释一下QuerySets是什么,它是如何工作的(如果你对它已经熟悉了,你可以直接跳到第二部分),我认为如果可以的话你应该总是返回QuerySet ...

  6. 51单片机 | SPI协议与应用实例

    ———————————————————————————————————————————— SPI总线 - - - - - - - - - - - - - - - - - - - - - - - - - ...

  7. asp.net 表单数据提交,常见方式与错误总结

    在ASP中,我们通常把表单提交到另外一个页面(接受数据页面).但是在ASP.NET中,服务端表单通常都是提交到本页面的,如果我设置 form1.action="test.aspx" ...

  8. Linux 常用命令速查

    0x001 .在指定文件夹下递归查询包含一个字符串的文件(列出的文件内容片段) grep -r   “要查找的串”    文件路径   如  : grep -r  "helloworld&q ...

  9. 对于一个IE8兼容性问题的反思

    近期做了一个需求,功能非常easy,把用户的优惠券数量读取出来,然后显示到"用户中心"上.开发完毕后.别的浏览器正常.可是到IE8上就不行了.并且,按下F12之后,就又能够载入出来 ...

  10. vs2017 生成代码策略 旧的 ObjectContext

    新版本的VS中已经去掉了生成ObjectContext的功能,需要手动下载一个生成ObjectContext的T4模板.在模型设计器的上下文菜单中选择添加代码生成项,在联机模板中选择对应EF版本的Ob ...