Retrofit以其靈活的調用形式, 強大的擴展性著稱. 隨着RxAndroid的推出, Retrofit這樣的可插拔式的網絡框架因其可以靈活兼容各種數據解析器, 回調形式(主要還是RxJava啦)而更加風靡.
但是! Retrofit2官方雖有一堆集成第三方json解析的實現,比如gson-converter等等..但唯獨就是沒有FastJson, 這讓我很不解..於是自己動手模仿gson-converter寫了一個fastjson-converter, 並封裝為一個更易用的適合Android平台的網絡框架RRO(名字來源於Retrofit+RxJava+Okhttp~).
github地址: https://github.com/panespanes/RRO/
RRO框架屏蔽了Retrofit稍顯復雜的配置, 同時保留Retrofit的特性, 一行代碼即可完成網絡請求的准備工作:
RRO.getApiService(YourApi.class);
接下來就和Retrofit一樣了, 通過YourApi這個本地定義的接口可以進行網絡請求.
------
我們用實際例子做演示,
http://api.github.com/是一個公開的Restful Api, 請求這個地址將得到github返回的json格式的數據, 這里展示如何用RRO完成這一網絡請求最終得到返回值.
public static String API_URL = "https://api.github.com"; //定義接口地址 public interface GitHub { //和Retrofit一樣, 定義一個本地接口 @GET("/") Observable<HashMap<String, String>> index(); } GitHub github = RRO.getApiService(GitHub.class, API_URL); //獲取包裝好的接口實例, 接下來就可以像調用本地接口方法一樣做網絡請求了. Call<HashMap<String, String>> call = github.index(); //與Retrofit用法一致, 調用本地方法 call.enqueue(new Callback<HashMap<String, String>>() { //異步執行 @Override public void onResponse(Call<HashMap<String, String>> call, Response<HashMap<String, String>> response) { // 這里的response即接口返回數據經FastJson解析后的結果. } @Override public void onFailure(Call<HashMap<String, String>> call, Throwable t) { Log.d("RRO", "onFail: " + t.getMessage()); } });
當然別忘了在gradle中引用:
在project的build.gradle定義maven地址
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
在module中添加引用
dependencies {
compile 'com.github.panespanes:RRO:44890e7717'
}
------------
如何使用RxJava呢~~
1 RRO.setApiUrl(API_URL); //同樣先設置請求地址(如果之前設置過這步可以忽略) 2 3 public interface RxGitHub { //返回值Call改為RxJava的Observalbe類型 4 @GET("/") 5 Observable<HashMap<String, String>> index(); 6 } 7 8 RxGitHub apiService = RRO.getApiService(RxGitHub.class); 9 apiService.index() 10 .subscribeOn(Schedulers.io()) //發送線程由RxJava管理 11 .observeOn(AndroidSchedulers.mainThread()) //在主線程回調 12 .subscribe(new Subscriber<HashMap<String, String>>() { 13 @Override 14 public void onCompleted() { 15 16 } 17 18 @Override 19 public void onError(Throwable e) { 20 21 } 22 23 @Override 24 public void onNext(HashMap<String, String> hashMap) { 25 // 這里返回FastJson的解析結果 26 } 27 });
就是這么簡單! 趕緊用起來吧
