Retrofit和RxJava基礎案例
RxJava優點:延遲指定時間後,發送1個數值,每隔指定時間就發送事件 等等。。。
詳情網站參考:https://www.jianshu.com/p/0d1fb9f08a34
Retrofit除了提供傳統的網絡請求方式之外,還提供RxJava版本的網絡請求方式。
區別在於:傳統方式採用CallBack接口,而RxJava方式採用了Observable接口,不同點主要體現在:
1. 用於描述網絡請求的接口的設置;
2. 網絡請求的封裝形式和發送形式不同。
下面主要看下這兩個的區別
不同點一:
傳統方式的Call<>接口
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Call<JSTranslation> getCall();
}
使用RxJava後的接口形式Observable<>
public interface GetRxJava_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Observable<JSTranslation> getCall();
}
不同點二:
傳統的方式進行網絡請求
//步驟4.創建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
//步驟5.創建網絡請求接口實例
GetRequest_Interface request = retrofit.create(GetRequest_Interface.class);
//對發送請求進行封裝,採用Call<>方式
Call<JSTranslation> call = request.getCall();
//步驟6.發送網絡請求
call.enqueue(new Callback<JSTranslation>() {
@Override
public void onResponse(Call<JSTranslation> call, Response<JSTranslation> response) {
response.body().show();
}
@Override
public void onFailure(Call<JSTranslation> call, Throwable t) {
Log.e("eee","連接失敗");
}
});
使用RxJava進行網絡請求(記得添加依賴,添加支持RXJava)
//創建Retrofit對象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
//創建網絡請求接口實例
GetRxJava_Interface request = retrofit.create(GetRxJava_Interface.class);
//對網絡請求進行封裝,採用Observable<>方式
Observable<JSTranslation> observable = request.getCall();
//發送網絡請求(異步),這裏是最大的不同之處
observable.subscribeOn(Schedulers.io()) //在IO線程進行網絡請求
.observeOn(AndroidSchedulers.mainThread())//回到主線程處理請求結果
.subscribe(new Observer<JSTranslation>() {
@Override
public void onSubscribe(Disposable d) {
//初始化工作
}
@Override
public void onNext(JSTranslation value) {
value.show();
//對返回結果JSTranslation進行處理
比如:
//這個地方就是跟以前一樣的網絡請求了
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
GetRxJava_Interface request =
retrofit.create(GetRxJava_Interface.class);
Observable<JSTranslation> login = request.login();
login.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<JSTranslation>() {
@Override
public void accept(JSTranslation jsTranslation) throws
Exception {
jsTranslation.show();
}
});
}
@Override
public void onError(Throwable e) {
//請求失敗
}
@Override
public void onComplete() {
//請求成功
}
});