recherche

Maison  >  Questions et réponses  >  le corps du texte

android - Comment créer un observable basé sur une fonction existante ou un rappel de fonction dans RxJava?

Dans le processus d'utilisation de Rxjava, il peut déjà y avoir de nombreux rappels de fonctions, alors comment créer un flux de données basé sur les paramètres de ces rappels de fonctions ?
Par exemple, si je dois modifier onKeyDown(), comment puis-je traiter une séquence spécifique de saisie utilisateur en fonction des différentes frappes au clavier, comme un traitement spécial lorsque l'utilisateur saisit "1, 2, 3, 4".

Ou s'il existe d'autres rappels de fonctions, comment utiliser des opérateurs tels que bufferDebouncezip pour traiter les données de ces rappels de fonctions ?

怪我咯怪我咯2784 Il y a quelques jours775

répondre à tous(1)je répondrai

  • 大家讲道理

    大家讲道理2017-05-16 13:30:50

    Vous pouvez écrire comme ça

        private BehaviorSubject<Integer> bs;
    
        private void testSeri() {
            bs = BehaviorSubject.create();
            //每3次 accept 一次
            bs.buffer(3)
                    .subscribe(new Consumer<List<Integer>>() {
                        @Override
                        public void accept(@NonNull List<Integer> ints) throws Exception {
                            StringBuilder sb = new StringBuilder();
                            for (int i = 0; i < ints.size(); i++){
                                sb.append(ints.get(0));
                            }
                            Toast.makeText(TestSubjectActivity.this, sb.toString(), Toast.LENGTH_SHORT).show();
                        }
                    });
        }
    
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            bs.onNext(keyCode);
            return super.onKeyDown(keyCode, event);
        }

    onKeyDown est le rappel d'Activity. Il n'est pas pratique de l'envelopper dans une autre couche, nous utilisons donc Subject, qui peut transmettre des données [à tout moment et n'importe où], s'abonner et transmettre facilement et écrire séparément. Pour les rappels généraux, vous pouvez l'écrire comme ceci. Laissez-moi vous donner une idée des rappels positionnés par Baidu

    .
        class LocationObservable implements ObservableOnSubscribe<BDLocation> {
            @Override
            public void subscribe(final ObservableEmitter<BDLocation> e) throws Exception {
    
                initLocation();
                mLocationClient.registerLocationListener( new BDLocationListener(){
                    @Override
                    public void onReceiveLocation(BDLocation location) {
                        if (location != null) {
                            mLocationClient.stop();
                            if (!TextUtils.isEmpty(location.getCity())) {
                                  e.onNext(location);
                                  e.onComplete();
                            }
                        } else {
                            // 定位失败
                            e.onError(new Exception("百度地图 定位失败"));
                        }
                    }
                } );
                mLocationClient.start();
            }
        }

    Pour les fonctions générales, vous pouvez faire ceci

    Observable<String> o1 = Observable.fromCallable(new Callable<String>() {
                @Override
                public String call() {
                    return func1();
                }
            });
            
            
    public String func1(){
        return "ok";
    }

    répondre
    0
  • Annulerrépondre