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 {

                    }
                });

 

或许存在问题,不过该例子是经过测试的,有问题请指出,共同进步

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