本文摘抄于Top 5 Android libraries every Android developer should know about -by Dario Penic
好的library可以奇迹般的降低开发难度和加快开发速度。
本文介绍Android开发中可以极大提高你的开发效率的工具库。
1. GSON
Gson
是非常方便的JSON解析和序列化工具。网络请求经常使用JSON来传输数据。
// Serialize
String userJSON = new Gson().toJson(user);
// Deserialize
User user = new Gson().fromJson(userJSON, User.class);
2. Retrofit
Retrofit
是一个网络请求库,直接把REST Api映射成java接口。所有请求URL和方法都使用java标签annotation
实现,保持了代码清楚和整洁。请求可以同步和异步方式返回。
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) {
}
});
3. EventBus
EventBus
就像其名字一样,是Android应用中各个部分交换信息的工具。例如Activity、Service、Fragemt之间交换信息。
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工具。直接使用java接口,而不用写sql语句来和数据库交互,而且省去了很多数据库相关的操作。当然还有一些其他的类似的工具GreenDAO和ORMLite。
5. Android Universal Image Loader
UIL
是一个图片加载工具,可以异步、缓存图片等。[原文作者认为]尽管Picasso提供更好的Api,可配置性远不如UIL方便。
imageLoader.displayImage(imageUri, imageView);
综上,如果使用Gradle,可以在build.gradle中加入如下内容,就能添加这写库到你的App中了:
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'
}