Android开发逐步走向成熟.而无论出现多少Android相关的开发工具,我们每
2014-06-17 09:11
435 查看
摘要:过去的时间里,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上查看代码片派生到我的代码片
// 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对象.
[js] view plaincopy在CODE上查看代码片派生到我的代码片
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发送消息到一个正在运行的服务,亦或是片段之间简单的互动.而下面使用的示例,就是如果网络连接丢失,该如何通知一个活动:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
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的对象能够保存在数据库里,如:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
user.save();
可以轻易替代大型SQL语句:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');
获取所有用户的例子:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
List<User> users = new Select().from(User.class).execute();
而其对应的SQL语句是这样:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;
ActiveAndroid是移除大量,用于和数据库一同工作的样板代码的一个很好的方法.当然除此之外,还有其他开源解决方案,如GreenDAO和ORMLite.
5. UNIVERSAL IMAGE LOADER
UIL是是一个开源项目,其目的就是提供一个可重复使用的仪器为异步图像加载、缓存和显示.它的使用很简单:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
imageLoader.displayImage(imageUri, imageView);
尽管Picasso拥有更好的API,但其缺乏自定义.而使用UIL构建器几乎可以配置所有(其中最重要的就是在抓取和缓存大型图片时,Picasso会失败).
良好的开源库会让你的开发变得更简单更快速,而普遍流行的库通常测试良好且易用使用.在大多情况下,你可以很容易的将它们从Maven中导入到Android Studio项目里.将它们添加到相关性的build.gradle 文件.并且同步之后,在你的应用里将能够很好的实现它们.
[js] view plaincopy在CODE上查看代码片派生到我的代码片
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开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷.不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库.在这里,向大家介绍的就是,在这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库.希望通过对它们的了解,能够对你的开发工作有所帮助.
1. GSON
Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.可用于将Java对象转换成对应的JSON表示,也可以将JSON字符串转换成一个等效的Java对象.如果与API打交道的话,那么这将会是你经常需要的东西.我们主要使用JSON的原因就是,相较XML,轻量级的JSON要简单的多.
[js] view plaincopy在CODE上查看代码片派生到我的代码片
// 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对象.
[js] view plaincopy在CODE上查看代码片派生到我的代码片
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发送消息到一个正在运行的服务,亦或是片段之间简单的互动.而下面使用的示例,就是如果网络连接丢失,该如何通知一个活动:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
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的对象能够保存在数据库里,如:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
user.save();
可以轻易替代大型SQL语句:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');
获取所有用户的例子:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
List<User> users = new Select().from(User.class).execute();
而其对应的SQL语句是这样:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;
ActiveAndroid是移除大量,用于和数据库一同工作的样板代码的一个很好的方法.当然除此之外,还有其他开源解决方案,如GreenDAO和ORMLite.
5. UNIVERSAL IMAGE LOADER
UIL是是一个开源项目,其目的就是提供一个可重复使用的仪器为异步图像加载、缓存和显示.它的使用很简单:
[js] view plaincopy在CODE上查看代码片派生到我的代码片
imageLoader.displayImage(imageUri, imageView);
尽管Picasso拥有更好的API,但其缺乏自定义.而使用UIL构建器几乎可以配置所有(其中最重要的就是在抓取和缓存大型图片时,Picasso会失败).
良好的开源库会让你的开发变得更简单更快速,而普遍流行的库通常测试良好且易用使用.在大多情况下,你可以很容易的将它们从Maven中导入到Android Studio项目里.将它们添加到相关性的build.gradle 文件.并且同步之后,在你的应用里将能够很好的实现它们.
[js] view plaincopy在CODE上查看代码片派生到我的代码片
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腾讯微博客户端开发二:相关工具篇
- Android开发相关工具
- Android开发相关工具等资源快速查找地址
- github上万颗star的21个JAVA(19个Android相关)开发框架,知道多少,用过多少(截止2016年12月17日)
- android开发环境与工具使用相关备忘录
- Android新版本开发工具的Android SDK Manager只有4.3及出现SSLPeerUnverified peer not authenticated解决办法
- Android Studio——使用Android ADT最新开发工具后,新建项目出现appcompat v7 他是什么?
- Android 开发效率工具,开发自测相关,测试工具,开发及编译环境,其他
- Android Studio重构之路,我们重新来了解一下Google官方的Android开发工具
- ubuntu10.04 64位 Android开发环境详细配置过程,及相关工具软件安装
- Android开发相关介绍及工具的安装
- Android开发环境配置以及开发相关资料和工具准备
- Android开发新工具Android Studio相关知识
- android 开发工具相关
- 使用Android ADT最新开发工具后,新建项目出现appcompat v7 他是什么?
- Android相关各种开发工具下载地址
- Android 开源项目android-open-project开发工具及测试工具解析 开发效率工具,开发自测相关,测试工具,开发及编译环境,其他
- Android内核开发 相关工具及源码下载汇总
- Android 开发相关工具