Novate 一款Android RxStyle的網路框架

Tamic發表於2017-10-16
去年我寫了一個Android網路框架Novate, 基於Retrofit和RxJava封裝的鏈式網路框架, 支援okhttp的呼叫分格,又相容Retrofit注入方式,並支援RxJava呼叫的鏈式操作, 不僅支援開發者自己擴充套件,還沿用Okhttp的高效的網路載入!最重要的novate自帶的異常驅動機制,幫開發者解決了絕大部分的異常 錯誤處理,減少API或者業務程式碼出錯的導致崩潰概率。


Novate 一款Android RxStyle的網路框架

功能

  • 優化設計:加入基礎API,減少Api冗餘

  • 強大的快取模式: 支援離線快取, 無網路智慧載入快取,可配置是否需要快取

  • cookie管理:自帶cookie管理機制

  • 全方位請求模式:支援多種方式訪問網路(get,put, post ,delete)

  • 輕送呼叫:支援表單,圖文一起,json上傳。

  • 檔案傳輸:支援檔案下載和上傳,支援進度

  • 動態新增:支援請求頭和引數統一新增,分別新增。

  • 結果處理:支援對返回結果的統一處理,自動幫你序列化複雜的資料。

  • 擴充套件性強:支援自定義的Retrofit的API,預設Api無法滿足時可自定義自己的Service

  • 悠雅方便:支援統一請求訪問網路的流程控制,以方便幫你完美加入Processbar進度。

  • RxJava結合: 結合RxJava,執行緒智慧控制

整合

Gradle:

  • root:

    repositories { maven { url "https://jitpack.io" } jcenter() }

  • app:

       dependencies {
          compile 'com.tamic.novate:novate:1.5.4.3'
       }複製程式碼

RxAPi

主要處理請求的API,包含RxGet, RxPost, RxDelete,RxPut, RxBody,RxFrom, RxUpLoad,RxDownLoad.使用基本APi之前 請閱讀對RxCallBack的介紹。

RxGet

進行get方式的請求呼叫,多種返回結果的方式供你選擇,返回不同的資料型別參考請看原文連結RxCallBack的介紹。

基礎使用:

返回String

  new Novate.Builder(this)
           .baseUrl(“www.xxx.com/”)
           .build()
           .rxGet("service/path", parameters, new RxStringCallback() {

        });複製程式碼

返回Bean

 novate.rxGet("path or url", parameters, new RxResultCallback<JavaBean>() {
       
    });複製程式碼

返回List

    new Novate.Builder(this)
            .baseUrl("http://xxx.com/")
            .build()
            .rxGet("service/getList", parameters, new RxListCallback<List<JavaBean>>() {
              ...
            });複製程式碼

返回File

novate.rxGet("path or url", null, new RxFileCallBack(filePath, "name.jpg") {
    .....

    });複製程式碼

RxPost:

進行Post方式的請求呼叫

返回String

   novate.rxPost("path or url", parameters, new RxStringCallback() {
    .....
      
    });複製程式碼

返回Bean

 novate.rxPost("path or url", parameters, new RxResultCallback<ResultModel>() {
  
 
 });複製程式碼

返回List

 novate.rxPost("path or url", parameters, new RxListCallback<List<ResultModel>>() {

       ....

    });複製程式碼

返回File

 novate.rxPost("path or url", null, new RxFileCallBack(filePath, "name.jpg") {

       ....
    });複製程式碼

上傳檔案


這裡主要介紹怎麼使用Novate上傳檔案:

Novate提供了2種方式上傳檔案。body和part模式,Body不包含key值,part包含key值。

RxUploadWithBody

以Body方式post資料,可以上報檔案,圖片等。

   String mPath = uploadPath; //"you File path ";
    String url = "http:/xxx.com";

    novate.rxUploadWithBody(url, new File(mPath), new RxStringCallback() {

      ....
    });

}複製程式碼

RxUploadWithPart

上傳檔案,預設的key是 image

   String mPath = uploadPath; //"you File path ";
   String url = "http:/xxx.com";
   File file = new File(mPath);
   novate.rxUploadWithPart(url, file, new RxStringCallback() {

      ....
    });複製程式碼

上傳多檔案:

RxUploadWithPartListByFile:

   List<File> fileList = new ArrayList<>();
    fileList.add(file);
    fileList.add(file);
    fileList.add(file);
    novate.rxUploadWithPartListByFile(url, fileList, new RxStringCallback() {

            
     });複製程式碼

圖文一起

   
   RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
      .addFormDataPart("key1", V1)
      .addFormDataPart("key2", v2)
      .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file))
      .build();
   novate.rxBody(url , requestBody, callback);複製程式碼

RxBody

 
   RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
      .addFormDataPart("key1", V1)
      .addFormDataPart("key2", v2)
      .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file))
      .build();
   
  novate.rxBody(url , requestBody, callback);複製程式碼

下載檔案

使用rxGet()實現下載:

  String downUrl = "http://wap.dl.pinyin.sogou.com/wapdl/hole/201512/03/SogouInput_android_v7.11_sweb.apk";

  novate.rxGet(downUrl, parameters, new RxFileCallBack(FileUtil.getBasePath(this), "test.apk") {

       
    });複製程式碼

RxDown()下載

    String downUrl = "http://wap.dl.pinyin.sogou.com/wapdl/hole/201512/03/SogouInput_android_v7.11_sweb.apk";
    new Novate.Builder(this)
            .rxDownload(downUrl, new RxFileCallBack(FileUtil.getBasePath(this), "test.apk") {
                
            });複製程式碼

OkHTTP 姿勢

喜歡okhtp姿勢的朋友可以繼續使用姿勢:

  Request request =
            new Request.Builder()
                    .get()
                    .url("you url")
                    .build();

    novate.execute(request, new RxStringCallback() {

        
    });複製程式碼


Retrofit Api 姿勢

Novate預設的API讓你不爽時,Novate同樣支援你自己Retrofit的ApiService

定義APi 同Retrofit的Api

新建MyApi


 public interface MyApi {

  @GET("url")
  Observable<MyBean> getdata(@QueryMap Map<String, String> maps);

 }複製程式碼

Execute

呼叫Call()

 MyApi myApi = novate.create(MyApi.class);

 novate.call(myApi.getdata(parameters),
            new BaseSubscriber<MyBean>{
            '''''''
            });

}複製程式碼


更多API,可以去github(github.com/Tamicer/Nov…)閱讀 歡迎star!有疑問可以直接留言或者提issues, 或者加QQ群45854294諮詢。


相關文章