rxjava2.0 第二篇之map操作符

 

map,字面意思,是地圖、規劃的意思,在rxjava 的中是 讓元數據 改變爲我們的目標數據的過程,轉換後的目標數據,將用於我們的觀察者使用,下文例子也有體現;    (案例中的地址,請大家替換爲自己可用的地址)

map方法:

@CheckReturnValue
@SchedulerSupport(SchedulerSupport.NONE)
public final <R> Observable<R> map(Function<? super T, ? extends R> mapper) {
    ObjectHelper.requireNonNull(mapper, "mapper is null");
    return RxJavaPlugins.onAssembly(new ObservableMap<T, R>(this, mapper));
}

 

具體示例如下:

//第一部分,第一部分爲初始化 被觀察者對象 ,而發送給下游的對象爲 OK HTTP返回的Response 對象 
create(new ObservableOnSubscribe<Response>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<Response> e) throws Exception {
                OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
//                Request request = new Request.Builder().url("https://www.sojson.com/api/qqmusic/8446666/json").build();
                Request request = new Request.Builder().url("http://192.168.1.66:8080/manager/json.json").build();
                Response response = okHttpClient.newCall(request).execute();
                e.onNext(response);
            }
        })
//第二部分,該部分就是本文中的map操作符核心內容,將Response對象轉換爲json數組
 .map(new Function<Response, JSONArray>() {
            @Override
            public JSONArray apply(@NonNull Response response) throws Exception {
                return new JSONObject(response.body().string()).getJSONArray("data");
            }
        })
//第三部分,開啓一個子線程做耗時操作
.subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread()) //將子線程切換到主線程中
                .doOnNext(new Consumer<JSONArray>() { 
                    @Override
                    public void accept(@NonNull JSONArray jsonArray) throws Exception {
                        Log.e("Untils", jsonArray.toString()); //該處可做打印or其他
                    }
                }).observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<JSONArray>() { // 消費者,完成消費
                    @Override   //成功後執行的方法
                    public void accept(@NonNull JSONArray jsonArray) throws Exception {
                        text.setText(jsonArray.toString());
                    }
                }, new Consumer<Throwable>() {
                    @Override    //發生了異常後執行的方法
                    public void accept(@NonNull Throwable throwable) throws Exception {

                    }
                });

 

或許存在問題,不過該例子是經過測試的,有問題請指出,共同進步

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