2016-05-10 3 views
0

Я уже пользуюсь RxJava + Retrofit + EventBus. Он отлично работает!Правильное использование Observable (RxJava)

Но я не совсем понимаю, как использовать Rx Observable как простой AsyncTask.

Я Виль объяснить немного:

К примеру у меня есть метод, который я хочу сделать в фоновом режиме (не в UI потоке):

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

Когда этот метод будет завершен, я хочу переключитесь на главную нить и покажите тост или что-то еще.

Использование AsynсTask я могу это сделать просто с помощью методов doInBackground и onPostExecute, но я хочу сделать это с помощью Rx Observable и Subscriber. Я использовал alhedy Schedulers, поэтому я знаю, как переключаться между потоками, я просто не знаю, как собрать все это вместе и заставить его работать!

Мне нужно и пример или фрагмент кода с немного объясните, спасибо!

+0

См http://blog.danlew.net/2014/10/08/grokking-rxjava- part-4/ – zsxwing

+0

@zsxwing, если вам это не сложно, отправьте фрагмент кода в соответствии с моим вопросом – Ololoking

ответ

0

Finaly я нашел решение:

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

Вы можете попробовать что-то вроде этого:

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)); 
    } 
} 
Смежные вопросы