1. 程式人生 > >rxJava 2.0介紹

rxJava 2.0介紹

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

對應的json格式的資料如下:
在這裡插入圖片描述
定義的實體類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() {

            }
        });