android - Comment créer un observable basé sur une fonction existante ou un rappel de fonction dans RxJava?
怪我咯
怪我咯 2017-05-16 13:28:50
0
1
737

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 ?

怪我咯
怪我咯

走同样的路,发现不同的人生

répondre à tous(1)
大家讲道理

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";
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!