2017-12-11 6 views
0

次の2つのasynctasksをrxjavaに変換しようとしていますが、どうすればいいかわかりません。何か案は? :asynctaskをRxjavaに変換するにはどうしたらいいですか?

new AsyncTask<Void, Void, Void>() { 
       @Override 
       protected Void doInBackground(Void... params) { 

        /* Shutdown video players */ 
        Set<Map.Entry<String, PlayerBundle>> entries = videoPlayerPool.entrySet(); 
        for (Map.Entry<String, PlayerBundle> entry : entries) { 
         PlayerBundle bundle = entry.getValue(); 
         bundle.player.release(); 
        } 

        /* Shutdown audio players */ 
        entries = audioPlayerPool.entrySet(); 
        for (Map.Entry<String, PlayerBundle> entry : entries) { 
         PlayerBundle bundle = entry.getValue(); 
         bundle.player.release(); 
        } 

        videoStreamer.stopStream(); 
        videoStreamer.release(); 

        audioStreamer.stopStream(); 
        audioStreamer.release(); 

        return null; 
       } 

       @Override 
       protected void onPostExecute(Void aVoid) { 
        cb.event(new Spin.Event<Void>()); 
       } 
      }.execute(); 

と:

new AsyncTask<Void, Void, Void>() { 
      @Override 
      protected Void doInBackground(Void... params) { 
       Set<Map.Entry<String, Participant>> entries = pool.entrySet(); 
       for (Map.Entry<String, Participant> entry : entries) { 
        Participant participant = entry.getValue(); 
        participant.release(); 
       } 
       return null; 
      } 

      @Override 
      protected void onPostExecute(Void aVoid) { 
       cb.event(new Spin.Event<Void>()); 
      } 
     }.execute(); 

は、私はすでに私のGradleでrxjavaを含まれていますが、この

+0

このHTTPS試してみてください変換については移動する方法がわからなかった:// piercezaifmanを。 com/converting-an-asynctask-to-rxjava /にアクセスし、問題が発生したときに本当の質問をしてください。キーワード "TRY" –

答えて

1
Observable.defer(new Func0<Observable<Void>>() { 
     @Override 
     public Observable<Void> call() { 
      /* Shutdown video players */ 
      Set<Map.Entry<String, PlayerBundle>> entries = videoPlayerPool.entrySet(); 
      for (Map.Entry<String, PlayerBundle> entry : entries) { 
       PlayerBundle bundle = entry.getValue(); 
       bundle.player.release(); 
      } 

      /* Shutdown audio players */ 
      entries = audioPlayerPool.entrySet(); 
      for (Map.Entry<String, PlayerBundle> entry : entries) { 
       PlayerBundle bundle = entry.getValue(); 
       bundle.player.release(); 
      } 

      videoStreamer.stopStream(); 
      videoStreamer.release(); 

      audioStreamer.stopStream(); 
      audioStreamer.release(); 

      return Observable.just(null); 
     } 
    }) 
    .doOnCompleted(new Action0() { 
     @Override 
     public void call() { 
      cb.event(new Spin.Event<Void>()); 
     } 
    }) 
    .subscribeOn(Schedulers.computation()) 
    .subscribe(); 

    Observable.defer(new Func0<Observable<Void>>() { 
     @Override 
     public Observable<Void> call() { 
      Set<Map.Entry<String, Participant>> entries = pool.entrySet(); 
      for (Map.Entry<String, Participant> entry : entries) { 
       Participant participant = entry.getValue(); 
       participant.release(); 
      } 
      return Observable.just(null); 
     } 
    }).doOnCompleted(new Action0() { 
     @Override 
     public void call() { 
      cb.event(new Spin.Event<Void>()); 
     } 
    }) 
    .subscribeOn(Schedulers.computation()) 
    .subscribe(); 
+0

上記2は2つの異なるasynctaskです。それらを別々に行うことは可能ですか?また、whats func0とaction0もあります。匿名のクラスのようにそれらをすることはできませんか?またはスタンドアロン –

+0

の2番目のタスクは同じ方法で変換されます。 Func0とAction0は匿名クラスです。これらはインタフェース名です – Aleksey

+0

それは私にエラーを与えます:シンボルfunc0とAction0を解決できません。任意のアイデアをどのようにこれを修正するには? –

関連する問題