android - Wie erstelle ich ein Observable basierend auf einer vorhandenen Funktion oder einem Funktionsrückruf in RxJava?
怪我咯
怪我咯 2017-05-16 13:28:50
0
1
642

Bei der Verwendung von Rxjava gibt es möglicherweise bereits viele Funktionsrückrufe. Wie kann also ein Datenstrom basierend auf den Parametern dieser Funktionsrückrufe erstellt werden?
Wenn ich beispielsweise onKeyDown() ändern muss, wie kann ich eine bestimmte Folge von Benutzereingaben entsprechend den verschiedenen Tastenanschlägen verarbeiten, z. B. eine spezielle Verarbeitung, wenn der Benutzer „1, 2, 3, 4“ eingibt?

Oder wenn es andere Funktionsrückrufe gibt, wie verwendet man Operatoren wie bufferDebouncezip, um Daten aus diesen Funktionsrückrufen zu verarbeiten?

怪我咯
怪我咯

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

Antworte allen (1)
大家讲道理

可以这样写

private BehaviorSubject bs; private void testSeri() { bs = BehaviorSubject.create(); //每3次 accept 一次 bs.buffer(3) .subscribe(new Consumer>() { @Override public void accept(@NonNull List 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是Activity的回调,不方便再包装一层,因此用了Subject这种可以【随时随地】发射数据、订阅和发射方便分开写的发射器。对于一般的回调可以这样写,给你个百度定位的回调感受一下

class LocationObservable implements ObservableOnSubscribe { @Override public void subscribe(final ObservableEmitter 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(); } }

对于一般的函数,可以这样

Observable o1 = Observable.fromCallable(new Callable() { @Override public String call() { return func1(); } }); public String func1(){ return "ok"; }
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!