日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android novate乱码,Android RxJava+Retrofit2+RxBinding

發布時間:2024/9/19 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android novate乱码,Android RxJava+Retrofit2+RxBinding 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android RxJava+Retrofit2+RxBinding

本文原創,轉載請注明出處。歡迎關注我的 簡書。

安利一波我寫的開發框架:MyScFrame喜歡的話就給個Star

前言:

之前寫了一篇名為Android 手把手教你使用Retrofit2的文章,只是單純并簡單的介紹了下Retrofit2的使用,現在我們把它跟RxJava以及RxBinding關聯起來,看看效果如何

添加依賴

RxBinding的依賴比較麻煩,是按控件包區分的,我這邊只用到了基礎包也就是android.widget.所以只引入了compile 'com.jakewharton.rxbinding:rxbinding:1.0.0'

//全新網絡請求框架Rxjava+RxAndroid+ReTrofit2+okHttp3

compile 'com.tamic.novate:novate:1.2.7'

compile 'com.squareup.retrofit2:retrofit:2.1.0'

compile 'com.squareup.retrofit2:converter-gson:2.1.0'

compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'

//日志攔截器

compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'

compile 'io.reactivex:rxjava:1.2.4'

compile 'io.reactivex:rxandroid:1.2.1'

compile 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0'

//RxBinding

compile 'com.jakewharton.rxbinding:rxbinding:1.0.0'

// compile 'com.jakewharton.rxbinding:rxbinding-support-v4:1.0.0'

// compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:1.0.0'

// compile 'com.jakewharton.rxbinding:rxbinding-design:1.0.0'

// compile 'com.jakewharton.rxbinding:rxbinding-recyclerview-v7:1.0.0'

開始關聯

MyRetrofit2Service差異

在使用RxJava之前是這樣的

@POST()

Call> post(@Url String url, @QueryMap Map map);

使用了RxJava之后是這樣的

@POST()

Observable> rxPost(@Url String url, @QueryMap Map map);

MyRetrofit2調用方法上的差異

在使用RxJava之前是這樣的

/**

* 異步調用

*/

public void getEnqueue() {

Call> call = mApi.post(NEWS_URI, params);

call.enqueue(new Callback>() {

@Override

public void onResponse(Call> call, Response> response) {

//處理請求成功

Log.e("OkHttp", "處理成功請求 response = " + response.body().toString());

}

@Override

public void onFailure(Call> call, Throwable t) {

//處理請求失敗

Log.e("OkHttp", "處理失敗請求");

}

});

// cancelCall(call);

}

使用了RxJava之后是這樣的

public void RxJavaGetEnqueue(Subscriber subscriber) {

Observable observable = mApi.rxPost(NEWS_URI, params)

.map(new HttpResultFunc());

toSubscribe(observable, subscriber);

}

private void toSubscribe(Observable o, Subscriber s) {

o.subscribeOn(Schedulers.io())//設置事件觸發在非主線程

.unsubscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())//在主線程處理返回數據

.subscribe(s);

}

/**

* 用來統一處理Http的resultCode,并將HttpResult的Data部分剝離出來返回給subscriber

*

* @param Subscriber真正需要的數據類型,也就是Data部分的數據類型

*/

private class HttpResultFunc implements Func1, T> {

@Override

public T call(HttpResult httpResult) {

Log.e("OkHttp", "HttpResultFunc httpResult = " + httpResult.toString());

if ("200".equals(httpResult.getStatus_code()) && httpResult.isSuccess()) {

return httpResult.getData();

}

throw new ApiException(httpResult.getStatus_code());

}

}

初看代碼量變多了,沒錯,是變多了,但是誰叫他最近比較火呢,而且目前我只是實現比較簡單的場景,還沒發揮出RxJava的真正功效呢.

這里需要說下HttpResultFunc方法的作用,好用就好用在這里,這里我是根據網絡請求的code跟success兩個參數判斷是否是成功的,如果是成功返回,那就返回data,如果是錯誤的話,自己寫了個ApiException類是用來處理錯誤信息的

/**

* Created by caihan on 2017/1/14.

*/

public class ApiException extends RuntimeException {

public static final int WRONG_1 = 100;

public static final int WRONG_2 = 101;

public ApiException(int resultCode) {

this(getApiExceptionMessage(resultCode));

}

public ApiException(String detailMessage) {

super(detailMessage);

}

/**

* 由于服務器傳遞過來的錯誤信息直接給用戶看的話,用戶未必能夠理解

* 需要根據錯誤碼對錯誤信息進行一個轉換,在顯示給用戶

*

* @param code

* @return

*/

private static String getApiExceptionMessage(int code) {

String message = "";

switch (code) {

case WRONG_1:

message = "錯誤1";

break;

case WRONG_2:

message = "錯誤2";

break;

default:

message = "未知錯誤";

}

return message;

}

}

界面上調用方式的變化

之前是這樣的

MyRetrofit2.getInstance().getEnqueue();

現在是這樣子的

private void rxGet() {

MyRetrofit2.getInstance().RxJavaGetEnqueue(new Subscriber() {

@Override

public void onCompleted() {

Log.e("OkHttp", "rxGet onCompleted");

}

@Override

public void onError(java.lang.Throwable e) {

Log.e("OkHttp", "rxGet onError e= " + e.toString());

}

@Override

public void onNext(News news) {

Log.e("OkHttp", "rxGet onNext news= " + news.toString());

}

});

}

用RxBinding處理頻繁點擊問題

開發中大家都會遇到這類問題,用戶不(gui)小(cai)心(xin)點擊了N次Button,導致Button相應了N次,之前我是寫了個DoubleClick類,專門處理此類事件,相信大家也都會,現在有了RxBinding,解放了

RxView.clicks(mButton)

.throttleFirst(1, TimeUnit.SECONDS)

.subscribe(new Action1() {

@Override

public void call(Void o) {

Log.d("OkHttp", "clickAction call");

rxGet();

}

});

throttleFirst()方法就是處理這種不小心事件,它會把設置時間內的其他響應事件過濾掉,怎么樣,是不是很好用呀...其他的控件如何處理我這邊就不寫了,大家感興趣的話可以看看相關資料

資料

總結

響應式開發我也還在摸索當中,這里沒做過多的封裝,因為還有很多地方沒搞懂,最近也是一直在找相關的資料.如果大家在其他地方看到了一些相關的優秀文章,可以分享給我,謝謝

總結

以上是生活随笔為你收集整理的android novate乱码,Android RxJava+Retrofit2+RxBinding的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。