Android框架|異步-RxJava2.x(四)

Rxjava實現網絡請求


與OkHttp結合進行網絡通信
OkHttp是一個第三方類庫,用於Android中請求網絡。
OkHttp官網
github源碼

實現:

1)通過 Observable.create() 方法,調用 OkHttp 網絡請求;
2)通過 map 操作符集合 gson,將 Response 轉換爲 bean 類;
3)調度線程,在子線程中進行耗時操作任務,在主線程中更新 UI ;


代碼:

Observable.create(new ObservableOnSubscribe<Response>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<Response> e) throws Exception {
                Builder builder = new Builder()
                        .url("http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world")
                        .get();
                Request request = builder.build();
                Call call = new OkHttpClient().newCall(request);
                Response response = call.execute();
                e.onNext(response);
            }
        }).map(new Function<Response, Translation>() {
                    @Override
                    public Translation apply(@NonNull Response response) throws Exception {

                        Log.e(TAG, "map 線程:" + Thread.currentThread().getName() + "\n");
                        if (response.isSuccessful()) {
                            ResponseBody body = response.body();
                            if (body != null) {
                                Log.e(TAG, "map:Json轉換前:" + response.body());
                                return new Gson().fromJson(body.string(), Translation.class);
                            }
                        }
                        return null;
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Translation>() {
                    @Override
                    public void accept(@NonNull Translation data) throws Exception {
                        Log.e(TAG, "subscribe 線程:" + Thread.currentThread().getName() + "\n");
                        Log.e(TAG, "成功:" + data.getContent().getOut() + "\n");
                    }
                });

在這裏插入圖片描述
金山詞霸api

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章