최근에 나는 "Taobao의 (코드 확인)"의 주위에 발견하고 rxjava2 될 rxjava 발견했다.
1 코드를 변경합니다
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("1");
e.onNext("2");
e.onNext("3");
e.onNext("4");
e.onComplete();
e.onNext("5");
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
dis=d;
Log.i("Rxjava2::onSubscribe","d");
}
@Override
public void onNext(String o) {
Log.i("Rxjava2::onNext",o);
if (o.equals("2")){
dis.dispose();
}
tv.setText(o);
}
@Override
public void onError(Throwable e) {
Log.i("Rxjava2::onError",e.getMessage().toString());
}
@Override
public void onComplete() {
Log.i("Rxjava2::onComplete","c");
}
});
겉으로 더 :
ObservableEmitter : 뷰어로 데이터를 전송합니다. 여기서 (클라이언트와 관찰자 [서버] [관찰자]의 관계로도 이해 될 수 I는 생각이) (onnext 관찰자 관찰자 송신된다의 OnError, 설명서 세 종류의 onComplete하지만 onnext 파라미터를 수행 할 수있다) 구덩이에서 subcrible 코드가 확실히 실행됩니다 명확한 것을 관계없이 관찰자는 한 바인딩으로, 그것은 보내드립니다받을 의향이 있지만, 시청자 수락하지 않도록 선택할 수 있습니다.
일회용 : 관찰자 어떻게 먹고 싶어하지 않을 경우 관찰 된 데이터가 관찰자를 보내, 당신은 물론, () 메소드를 처리하기 위해 전화를해야, 이것은 관찰자가 데이터를 받아 보는 사람을 방해 단지 onComplete를 또는의 OnError 메서드를 호출 할 수도 있으며, rxjava1.x은 동일합니다
2 명 변경 : 조치 1 기능 1 콜백처럼 아무것도 보지 않는다.
특별 에피소드 : 개인 개발 시간 rxjava1.x 도둑은 다른를 사용하지 않을하고자하고, 콜백 조치 1을 쓸 필요를 참조하지 않습니다. 그러나 혈액의 교훈은이 버그를 경험하고있다 :
java.lang.IllegalStateException : Scheduler.Worker 스레드에서 던져 예외입니다. `onError` 처리를 추가합니다.
rx.exceptions.OnErrorNotImplementedException :에 의한
rx.exceptions.MissingBackpressureException :에 의한
아마도 그 이유는 다음과 이하의 OnError 콜백 처리 (환원 시나리오 : 검은 화면이 다음에 따라 잠시에 눌러 이동 후) 잘못] 개인 의견
핏 아버지 색인 : 로그가 본 아래 니켈 말라, 무슨 라인은 오류를보고하지 않습니다
해결책 : 양고기 플러스의 OnError 과정에 지역 rxjava의 사용? (겉으로 다음 팬 붕괴하지 않았다)
물론, 내 생각은 하나님의 위대한 작품을 읽은 후, 강제로 절대적으로 잘못된 것입니다 :
코드 :
Observable.just("ddd").subscribe(new Consumer<String>() {
@Override
public void accept(@NonNull String s) throws Exception {
}
});
겉으로는 던져, 처음에는 눈에 추가 기분이 6 (엉망).
Observable.just("ddd").subscribe((msg)->{Log.i("接收的值",msg);},Throwable::printStackTrace);
또는 같은 rxjava1처럼 쓰기?
Observable.just("ddd").subscribe((msg)->{Log.i("接收的值",msg);},(error)->{Log.i("error",error.getMessage());});
Retrofit2 + Rxjava2 변경
Retrofit adapter = new Retrofit.Builder()
.baseUrl(endpoint)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return adapter.create(serviceClass);
// rxjava2 폴링, 시간마다 0.1 초 폴링 폴링 제한된 수의 폴링 20 배의 총을 사용합니다.
Flowable.interval(0, 100, TimeUnit.MILLISECONDS)
.take(20)
.subscribeOn(Schedulers.io())
.subscribe(new Subscriber<Long>() {
@Override
public void onSubscribe(Subscription s) {
s.request(100);
mCheckUpdate = Disposables.fromSubscription(s);
}
@Override
public void onNext(Long aLong) {
if (isNetworkAvailable()) {
processor.onNext("checkUpdate");
mCheckUpdate.dispose();
}
}
@Override
public void onError(Throwable t) {
}
@Override
public void onComplete() {
// getAssociated();
showDialog();
}
});