在Android中利用RxJava調度器,我們可以很方便讓被訂閱者 or 訂閱者在不同的線程中各守此責,不多廢話基本RxJava在網絡框架中的使用是再常見不過的了(調度器的優點也體現在這裏)。
mTestProtocol.text_Get() // (1)
.compose(this.<String>bindToLifecycle()) // (2)
.observeOn(AndroidSchedulers.mainThread()) // (3)
.subscribe(new Action1<String>() { // (4)
@Override
public void call(String data) { // (5)
tv_reuslt.setText("Get Result:\r\n" + data);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) { // (6)
tv_reuslt.setText("Get Result:\r\n" + throwable.getMessage());
}
});
new Observer<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String data) {
}
};
public Observable<String> text_Get() {
String path = "1";
return createObservable(BASE_URL + path, XgoHttpClient.METHOD_GET, null); // (1)
}
/**
* 創建一個工作在IO線程的被觀察者(被訂閱者)對象
* @param url
* @param method
* @param params
*/
protected Observable<String> createObservable(final String url, final String method, final TreeMap<String, Object> params) {
return Observable.create(new Observable.OnSubscribe<String>() { // (2)
@Override
public void call(Subscriber<? super String> subscriber) {
Request request = XgoHttpClient.getClient().getRequest(url, method, params); // (3)
String json = XgoHttpClient.getClient().execute2String(request); // (4)
setData(subscriber, json); // (5)
}
}).subscribeOn(Schedulers.io());
}
/**
* 爲觀察者(訂閱者)設置返回數據
* */
protected void setData(Subscriber<? super String> subscriber, String json) {
if (TextUtils.isEmpty(json)) { // (6)
subscriber.onError(new Throwable("not data"));
return;
}
subscriber.onNext(json); // (7)
subscriber.onCompleted();
}