結合Retrofit,RxJava,Okhttp,FastJson的網絡框架RRO


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            });

就是這么簡單! 趕緊用起來吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM