版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mwthe/article/details/82774683
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 {
}
});
或许存在问题,不过该例子是经过测试的,有问题请指出,共同进步