2016-07-27 45 views
1

如何可以结合两个订阅等:如何两个订阅连接在RXJava/Android的

1)改造& RX其将JSON成recyclerView所示的字符串列表。

restClient.getCatFacts() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<CatFactsResponse>() { 
       @Override 
       public void onCompleted() { 
        Log.i(TAG, "onCompleted"); 
       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG, "onError, " + e.getMessage()); 
       } 

       @Override 
       public void onNext(CatFactsResponse catFactsResponse) { 
        catFactsList = catFactsResponse.getCatFacts(); 
       } 
      }); 

2)和Jack Wharton的RxBinding库对EditText小部件中所做的更改作出反应。

subscription = RxTextView 
      .textChangeEvents(editText) 
      .debounce(400, TimeUnit.MILLISECONDS) 
      .observeOn(Schedulers.newThread()) 
      .subscribe(new Observer<TextViewTextChangeEvent>() { 
       @Override 
       public void onCompleted() { 
        Log.i(TAG, "onCompleted"); 
       } 

       @Override 
       public void onError(Throwable e) { 
        Log.i(TAG, "onError >> " + e.getMessage()); 
       } 

       @Override 
       public void onNext(TextViewTextChangeEvent textViewTextChangeEvent) { 
        Log.i(TAG, textViewTextChangeEvent.text().toString()); 
       } 
      }); 

获取使用EditText动态过滤的列表。我是否应该使用Subject或者某些类?如果是,那么它应该是什么样子?感谢您的帮助:)

回答

1

您应该使用flatMap操作

subscription = RxTextView 
      .textChangeEvents(editText) 
      .debounce(400, TimeUnit.MILLISECONDS) 
      .map(new Func1<TextViewTextChangeEvent, String>() { 
       @Override 
       public String call(TextViewTextChangeEvent textViewTextChangeEvent) { 
        return textViewTextChangeEvent.text(); 
       } 
      }) 
      .flatMap(new Func1<String, Observable<CatFactsResponse>>() { 
       @Override 
       public Observable<CatFactsResponse> call(String text) { 
        return restClient.getCatFacts(text) 
          .subscribeOn(Schedulers.io()) 
          .observeOn(AndroidSchedulers.mainThread()); 
       } 
      }) 
      .subscribe(...); 
+0

出色答卷。现在我终于知道我该怎么做这种关系了:) – Glaeqen