2016-05-10 26 views
0

Ich verwende bereits RxJava + Retrofit + EventBus. Es funktioniert super!Korrekte Verwendung von Observable (RxJava)

Aber ich bin nicht vollständig zu verstehen, wie man Rx Observable als einfach AsyncTask verwendet.

ich ein bisschen erklären wil:

Zum Beispiel habe ich eine Methode haben, die ich (nicht im UI-Thread) im Hintergrund zu tun:

public void teachMe() { 
     for(int i=0;i< daysUntilGenius;i++){ 
      Log.e("WORK DAY" , String.valueOf(i)); 
      } 
    } 

Wenn diese Methode Ich möchte abgeschlossen Wechseln Sie zum Haupt-Thread und zeigen Sie Toast oder etwas anderes.

AsynсTask Verwenden ich kann es tun, einfach mit Methoden doInBackground und onPostExecute, aber ich will, es zu tun mit Rx Observable und Subscriber. Ich habe bereits Scheduler benutzt, also weiß ich, wie man zwischen Threads umschaltet, ich weiß einfach nicht, wie ich das alles zusammensetzen soll und es funktionieren lässt!

Ich brauche und Beispiel oder Code-Schnipsel mit ein wenig zu erklären, danke!

+0

Siehe http://blog.danlew.net/2014/10/08/grokking-rxjava- Teil-4/ – zsxwing

+0

@zsxwing, wenn es Ihnen nicht schwer ist, bitte Code-Schnipsel nach meiner Frage – Ololoking

Antwort

0

Finaly i Lösung gefunden:

public Subscription test(final int days){ 
    return Observable.create(new Observable.OnSubscribe<Void>() { 
     @Override 
     public void call(Subscriber<? super Void> subscriber) { 
      teachMe(days); 
      subscriber.onCompleted(); 
     } 

    }) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Subscriber<Void>() { 
       @Override 
       public void onCompleted() { 
        Toast.makeText(MainActivity.this.getApplicationContext(),"COMPLETE",Toast.LENGTH_LONG).show(); 
       } 

       @Override 
       public void onError(Throwable e) { 
       } 

       @Override 
       public void onNext(Void aVoid) { 
       } 
      }); 
} 


public void teachMe(int days) { 
    for(int i=0;i< daysUntilGenius;i++){ 
     Log.e("WORK DAY" , String.valueOf(i)); 
     } 
} 
0

Sie können so etwas wie dies versuchen:

public void doAsyncStuff(int days) { 
    Observable 
     .just(days) 
     .subscribeOn(Schedulers.newThread()) 
     .doOnEach(n -> teachMe(n)) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(n -> Log.i("Completed " + n)); 
} 

public void teachMe(int daysUntilGenius) { 
    for(int i = 0; i < daysUntilGenius; i++){ 
     Log.e("WORK DAY", String.valueOf(i)); 
    } 
} 
Verwandte Themen