2017-01-10 9 views
0

私は3要素のarraylistが "1"、 "2"、 "3"のオブザーバブルを使用しています。 2つの同様の、しかしわずかに異なる方法でそれらをテストしています。以下のコードでセクション1とセクション2と考えることができます。RxJava:観測値が重複した値を返す

各テストの結果は、3行をsysで返すと仮定しました。私はそこに一つのセクションしか残さず、他のセクションをコメントアウトすると効率的です。

しかし、両方のセクションがそこに保持されている場合、3つの値を返す代わりにセクション2が6つの値を返します。

どういうわけか前回の実行(セクション1)の影響を受けますが、わかりません。私は観察可能なものを退会しようとしましたが、問題を解決しませんでした。

このコードでは、正確に私が紛失しているものがわかりましたら、確認してください。

 import rx.Observable; 
     import rx.Subscription; 
     import rx.functions.Func1; 

     import java.util.ArrayList; 
     import java.util.List; 


     public class RxJavaTest { 

       static List<String> list = new ArrayList() ; 

      static Observable<List<String>> query(String text) 
      { 
       list.add("one") ;list.add("two") ;list.add("three") ; 

       Observable<List<String>> results = Observable.just(list) ; 

       return results ; 
      } 

      public static void main(String[] args) { 

       Subscription subscription ; 

       subscription = query("Hello, World 1").subscribe(urls -> { 
        Observable.from(urls).subscribe(url -> System.out.println("section 1 "+url)) ; 
       }) ; 

       subscription.unsubscribe(); 

       query("Hello, World 2") 
         .subscribe(urls -> { 
          for (String url : urls) { 
           System.out.println(" section 2 "+url); 
          } 
         }) ; 


      } 

     } 

のSysログアウト:マークされますが、セクション1のコードを削除した場合、それはそこに

section 1 one 
section 1 two 
section 1 three 

section 2 one 
section 2 two 
section 2 three 
section 2 one --duplicate 
section 2 two --duplicate 
section 2 three --duplicate 

答えて

2

あなたは、静的なリストを持っているではありません、予想外のレコード。 2度実行すると、要素数が2倍になります。

代わりの

 static List<String> list = new ArrayList() ; 

     static Observable<List<String>> query(String text) 
     { 
      list.add("one") ;list.add("two") ;list.add("three") ; 

      Observable<List<String>> results = Observable.just(list) ; 

      return results ; 
     } 

 static Observable<List<String>> query(String text) 
     { 
      List<String> list = new ArrayList() ; 
      list.add("one") ;list.add("two") ;list.add("three") ; 
      Observable<List<String>> results = Observable.just(list) ; 
      return results ; 
     } 
+0

ような何かをあなたのArturに感謝..ところでなぜ静的リストに値を保存しますか..? – Girish

+0

これは実際に静的な問題ではなく、インスタンスフィールドでも同じことが起こります。相違点は、各クエリメソッド呼び出しで作成された新しいリストと、何かが呼び出される前に割り当てられ、呼び出し間で保持されるリスト(静的またはクラスのインスタンスフィールドが行うように)との違いです。 –

関連する問題