Rxjava功能個人感覺很好用,里面的一些操作符很方便,Rxjava有:被觀察者,觀察者,訂閱者,

成都創(chuàng)新互聯(lián)公司專注于池州網(wǎng)站建設(shè)服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供池州營銷型網(wǎng)站建設(shè),池州網(wǎng)站制作、池州網(wǎng)頁設(shè)計、池州網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務,打造池州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供池州網(wǎng)站排名全網(wǎng)營銷落地服務。
被觀察者通過訂閱者訂閱觀察者,從而實現(xiàn)觀察者監(jiān)聽被觀察者返回的數(shù)據(jù)
下面把Rxjava常用的模型代碼列出來,還有一些操作符的運用:
依賴:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' // Because RxAndroid releases are few and far between, it is recommended you also // explicitly depend on RxJava's latest version for bug fixes and new features. compile 'io.reactivex.rxjava2:rxjava:2.1.5'
這個是另一種解析數(shù)據(jù)的方法,阿里巴巴旗下的,聽說是解析最快的解析器。。。。
compile 'com.alibaba:fastjson:1.2.39'
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import io.reactivex.BackpressureStrategy;
import io.reactivex.Flowable;
import io.reactivex.FlowableEmitter;
import io.reactivex.FlowableOnSubscribe;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private TextView name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = (TextView) findViewById(R.id.name);
//用來調(diào)用下面的方法,監(jiān)聽。
name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
interval();
}
});
}
//例1:Observer
public void observer() {
//觀察者
Observer<string> observer = new Observer<string>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull String s) {
//接收從被觀察者中返回的數(shù)據(jù)
System.out.println("onNext :" + s);
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
};
//被觀察者
Observable<string> observable = new Observable<string>() {
@Override
protected void subscribeActual(Observer<!--? super String--> observer) {
observer.onNext("11111");
observer.onNext("22222");
observer.onComplete();
}
};
//產(chǎn)生了訂閱
observable.subscribe(observer);
}
//例2:Flowable
private void flowable(){
//被觀察者
Flowable.create(new FlowableOnSubscribe<string>() {
@Override
public void subscribe(@NonNull FlowableEmitter<string> e) throws Exception {
for (int i = 0; i < 100; i++) {
e.onNext(i+"");
}
}
//背壓的策略,buffer緩沖區(qū) 觀察者
//背壓一共給了五種策略
// BUFFER、
// DROP、打印前128個,后面的刪除
// ERROR、
// LATEST、打印前128個和最后一個,其余刪除
// MISSING
//這里的策略若不是BUFFER 那么,會出現(xiàn)著名的:MissingBackpressureException錯誤
}, BackpressureStrategy.BUFFER).subscribe(new Consumer<string>() {
@Override
public void accept(String s) throws Exception {
System.out.println("subscribe accept"+s);
Thread.sleep(1000);
}
});
}
//例3:線程調(diào)度器 Scheduler
public void flowable1(){
Flowable.create(new FlowableOnSubscribe<string>() {
@Override
public void subscribe(@NonNull FlowableEmitter<string> e) throws Exception {
for (int i = 0; i < 100; i++) {
//輸出在哪個線程
System.out.println("subscribe Thread.currentThread.getName = " + Thread.currentThread().getName());
e.onNext(i+"");
}
}
},BackpressureStrategy.BUFFER)
//被觀察者一般放在子線程
.subscribeOn(Schedulers.io())
//觀察者一般放在主線程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<string>() {
@Override
public void accept(String s) throws Exception {
System.out.println("s"+ s);
Thread.sleep(100);
//輸出在哪個線程
System.out.println("subscribe Thread.currentThread.getName = " + Thread.currentThread().getName());
}
});
}
//例4:http請求網(wǎng)絡(luò),map轉(zhuǎn)化器,fastjson解析器
public void map1(){
Observable.create(new ObservableOnSubscribe<string>() {
@Override
public void subscribe(@NonNull final ObservableEmitter<string> e) throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://qhb.2dyt.com/Bwei/login")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
e.onNext(result);
}
});
}
})
//map轉(zhuǎn)換器 flatmap(無序),concatmap(有序)
.map(new Function<string, bean="">() {
@Override
public Bean apply(@NonNull String s) throws Exception {
//用fastjson來解析數(shù)據(jù)
return JSONObject.parseObject(s,Bean.class);
}
}).subscribe(new Consumer<bean>() {
@Override
public void accept(Bean bean) throws Exception {
System.out.println("bean = "+ bean.toString() );
}
});
}
//常見rxjava操作符
//例 定時發(fā)送消息
public void interval(){
Observable.interval(2,1, TimeUnit.SECONDS)
.take(10)
.subscribe(new Consumer<long>() {
@Override
public void accept(Long aLong) throws Exception {
System.out.println("aLong = " + aLong);
}
});
}
//例 zip字符串合并
public void zip(){
Observable observable1 = Observable.create(new ObservableOnSubscribe<string>() {
@Override
public void subscribe(@NonNull ObservableEmitter<string> e) throws Exception {
e.onNext("1");
e.onNext("2");
e.onNext("3");
e.onNext("4");
e.onComplete();
}
});
Observable observable2 = Observable.create(new ObservableOnSubscribe<string>() {
@Override
public void subscribe(@NonNull ObservableEmitter<string> e) throws Exception {
e.onNext("A");
e.onNext("B");
e.onNext("C");
e.onNext("D");
e.onComplete();
}
});
Observable.zip(observable1, observable2, new BiFunction<string,string,string>() {
@Override
public String apply(@NonNull String o, @NonNull String o2) throws Exception {
return o + o2;
}
}).subscribe(new Consumer<string>() {
@Override
public void accept(String o) throws Exception {
System.out.println("o"+ o);
}
});
}總結(jié)
以上就是本文關(guān)于Rxjava功能操作符的使用方法詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Javaweb應用使用限流處理大量的并發(fā)請求詳解、分享一個簡單的java爬蟲框架、Java線程之線程同步synchronized和volatile詳解等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!
新聞標題:Rxjava功能操作符的使用方法詳解
網(wǎng)頁地址:http://chinadenli.net/article18/pgjhgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、域名注冊、微信公眾號、服務器托管、做網(wǎng)站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)