안드로이드는 RxJava2.0에 대한 몇 가지 지식을 축적

면책 조항 :이 문서는 블로거 원본입니다은 허용 블로거없이 복제 할 수 없다. https://blog.csdn.net/Coder_Hcy/article/details/78819648

최근에 나는 "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();
                    }
                });

 

 


 

 

 

 

 

추천

출처blog.csdn.net/Coder_Hcy/article/details/78819648