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 {
}
});
或許存在問題,不過該例子是經過測試的,有問題請指出,共同進步