2017-12-26 28 views
0
Observable<ScanResult> scanResultStream(UUID uuid) { 
    return Observable.create(new AsyncOnSubscribe<Boolean, Subscriber<ScanResult>>() { 
     @Override 
     Boolean next(Boolean previousState, long requested, Observer<Observable<Subscriber<ScanResult>>> sub) { 
      return true; 
     } 
    }); 
} 

私は考えることができるが、これはコンパイルするために取得することはできませんし、いつものようにRxJavaのドキュメントはありません非常に有用である、と私はより良い例や説明を見つけることができないすべてのものを試してみました。はAsyncOnSubscribeでコンパイルエラー解決できません

問題は、ドキュメントが、「このと互換性がありますSubscriber Sの種類」であると言うAsyncOnSubscribeための第二のコンストラクタの型パラメータ<T>、であるように見えます。これを文字通り取ると、これは<Subscriber<ScanResult>>であるべきだと思いますが、これはうまくいきません。クラスが抽象宣言されなければならない、またはを実装する必要がありますが、とすると、私のメソッドシグネチャはnext(Boolean previousState, long requested, Observer<Observable<Subscriber<ScanResult>>> obs)でなければなりませんが、メッセージは 'メソッドがスーパークラスからメソッドをオーバーライドしません'というメッセージを生成します。

また、未チェックの割り当て: 'rx.Observable<T>rx.Observable<com.polidea.rxandroidble.scan.ScanResult'が表示されています。

私がAsyncOnSubscribeの明確な説明を見つけることができれば、おそらく私はこれを理解することができました。 (これはすべて私がObservable.create(Observable.OnSubscribe)を使用したい時に始めたが、それが廃止されましたが分かった。)

+0

まず、protected Boolean generateState()のオーバーライドが欠落しているようです。メソッドの適切な戻り値の型は、Observable >です。あなたがしようとしていることを説明してください。 (rxjava 1.3.4を使用) –

+0

すべてはここから始まりました:http://adelnizamutdinov.github.io/blog/2015/01/23/using-rxjavas-observable-semantics-for-greater-good/(2番目のコードスニペット)ユーザが退会した場合にHTTPリクエストを自動的にキャンセルするために、 'subscriber.add(Subscriptions.create(call :: cancel)); 'の使用が発生しました。私は、可能な限り類似のものを描きたかったのですが、著者が廃止予定のObservable.create()を使用していることがわかりました。これは 'AsyncOnSubscribe'を使って私にフォームを導きましたが、私はそれをどのように適用するのか分かりません。 ( 'generateState()'のオーバーライドを追加しましたが、助けになりませんでした) –

答えて

0

環境:

RxJava 1.3.4

  • これは間違っている:オブザーバー>>サブ
  • IMP

結果がありません

Observable<ScanResult> scanResultStream(UUID uuid) { 
    Observable<ScanResult> scanResultObservable = 
     Observable.create(
      new AsyncOnSubscribe<Boolean, ScanResult>() { 
       @Override 
       protected Boolean generateState() { 
       return null; 
       } 

       @Override 
       protected Boolean next(
        Boolean state, 
        long requested, 
        Observer<Observable<? extends ScanResult>> observer) { 
       return null; 
       } 
      }); 

    return scanResultObservable; 
    } 
+0

ありがとうございます。この文書の声明は私を捨てました:Tは "これと互換性のあるサブスクライバのタイプ"です。まあ、*任意の*サブスクライバのタイプは「サブスクライバ」ですよね? 「Tは加入者が期待するアイテムのタイプ」のようなものでなければなりません。 'AsyncOnSubscribe'の中のさまざまなメソッドのいくつかの追加的な説明も理解できます。たとえば、 'createStateless()'メソッドの場合、これはどういう意味ですか?「これは、次の関数がその状態を閉じるときに使用する必要があります。そして、AsyncとSync OnSubscribeの違いは何ですか? –

関連する問題