2017-03-01 6 views
0

Ich bin ein Anfänger von RxJAVA. Ich möchte einen Initialisierungsjob einem anderen Thread zuweisen und mich ankündigen, wenn er fertig ist, damit ich mit der Arbeit beginnen kann. Da dieses Observable keine Daten zum Emittieren hat, verwende ich den Void-Typ wie in this topic beschrieben. Aber mein Observer onNext und onComplete funktioniert nicht, wenn ich den Void-Typ verwende, ich habe stattdessen versucht, String zu verwenden, und es funktioniert gut. Ich möchte fragen, sollte ich Void in diesem Szenario verwenden oder RxJAVA hat einen besseren Weg für diese Art von Anforderung? Hier ist mein Code:Beobachter <Void> 's OnNext und onComplete sind nicht

Observable.create(new ObservableOnSubscribe<Void>() { 
    @Override 
    public void subscribe(ObservableEmitter<Void> e) throws Exception { 
    initialize(); 
    e.onNext(null); 
    e.onComplete(); 
    } 
}).subscribeOn(Schedulers.computation()).subscribe(new Observer<Void>() { 
    @Override 
    public void onSubscribe(Disposable d) {} 

    @Override 
    public void onComplete() { 
    Log.d(TAG, "Test RxJAVA, onComplete"); 
    } 

    @Override 
    public void onError(Throwable e) { 
    Log.d(TAG, "Test RxJAVA, onError"); 
    } 

    @Override 
    public void onNext(Void noData) { 
    Log.d(TAG, "Test RxJAVA, onNext"); 
    } 
}); 

bearbeiten Bearbeiten Sie die Antwort von @JohnWowUs. Es funktioniert gut, danke.

Completable.fromCallable(new Callable<Void>() { 
    @Override 
    public Void call() throws Exception { 
    initialize(); 
    } 
}).subscribeOn(Schedulers.computation()) 
    .subscribe(new CompletableObserver() { 
     @Override 
     public void onSubscribe(Disposable d) {} 

     @Override 
     public void onComplete() { 
     Log.d(TAG, "Test RxJAVA, onComplete"); 
     } 

     @Override 
     public void onError(Throwable error) { 
     Log.d(TAG, "Test RxJAVA, onError"); 
     } 
}); 

Antwort

0

RxJava akzeptiert keine Nullwerte mehr. Siehe here. Sie sollten in diesem Fall eine Completable verwenden. Etwas wie

Completable.fromCallable(new Callable<Void>() { 
          @Override 
          public Void call() throws Exception { 
           initialize(); 
           return null; 
          }) 
      .subscribe(new CompletableObserver<Void>() { 
         @Override 
         void onSubscribe(Disposable d) { 

         } 

         @Override 
         void onComplete() { 
          Log.d(TAG, "Test RxJAVA, onComplete"); 
         } 

         @Override 
         void onError(Throwable error) { 
          Log.d(TAG, "Test RxJAVA, onError"); 
         }); 
+0

Es funktioniert, danke – Josper

Verwandte Themen