rxJava 2.0介紹
阿新 • • 發佈:2018-11-11
Retrofit單獨使用示例
1,首先新增依賴和許可權
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
<uses-permission android:name="android.permission.INTERNET" />
2,根據介面url返回的資料定義對應的實體類
例如介面 http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello world
定義的實體類Translation.java如下:
public class Translation { private int status; private content content; private static class content { private String from; private String to; private String vendor; private String out; private int errNo; } //定義 輸出返回資料 的方法 public void show() { System.out.println(status); System.out.println(content.from); System.out.println(content.to); System.out.println(content.vendor); System.out.println(content.out); System.out.println(content.errNo); } }
3,建立用於描述網路請求的介面
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Call< Translation > getCall();
}
4,建立retrofit物件
5,獲取call例項
6,傳送網路請求,處理返回的資料
public void request() { //步驟4:建立Retrofit物件 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://fy.iciba.com/") // 設定 網路請求 Url .addConverterFactory(GsonConverterFactory.create()) //設定使用Gson解析(記得加入依賴) .build(); // 步驟5:獲取Call例項 Call<Translation> call = retrofit.create(GetRequest_Interface.class).getCall(); //步驟6:傳送網路請求(非同步) call.enqueue(new Callback<Translation>() { //請求成功時回撥 @Override public void onResponse(Call<Translation> call, Response<Translation> response) { // 步驟7:處理返回的資料結果 response.body().show(); } //請求失敗時回撥 @Override public void onFailure(Call<Translation> call, Throwable throwable) { System.out.println("連線失敗"); } }); }
retrofit + rxjava
1.因為要結合使用RxJava,所以返回值就不在是一個Call了,而是一個Observable:
public interface GetRequest_Interface {
@GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
Observable< Translation > getCall();
}
2,建立retrofit例項時,配置關聯rxJava2:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://fy.iciba.com/") // 設定 網路請求 Url
.addConverterFactory(GsonConverterFactory.create()) //設定使用Gson解析(記得加入依賴)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
3,步驟5返回的不再是call例項,而是RxJava裡面的被觀察者Observable例項:
Observable<Translation> observable= retrofit.create(GetRequest_Interface.class).getCall();
4,獲取到了Observable的例項,接下來就是rxJava的語法了,如下:
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Translation>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Translation translation) {
// 成功獲取到gson轉換後的物件translation
}
@Override
public void onError(Throwable e) {
Log.v("zyl", "請求失敗:"+e.getMessage());
}
@Override
public void onComplete() {
}
});