2017-10-06 2 views
2

私は次のようになり、私の観察可能なサブスクリプションがあります。このRxJavaコードをリファクタリングする方法はありますか?

 compositeDisposables.add(githubService.getRepos() 
        .subscribeOn(Schedulers.io()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(
          (List<GithubRepo> value) -> { 
           if (!value.isEmpty()) { 
            ArrayAdapter<GithubRepo> adapter = new 
    ArrayAdapter<GithubRepo> 
              (MainActivity.this, 

    android.R.layout.simple_spinner_dropdown_item, value); 
            reposSpinner.setAdapter(adapter); 
            reposSpinner.setEnabled(true); 
           } else { 
            showEmptyRepoAdapterState(); 
           } 
          }, 
          (Throwable e) -> { 
           e.printStackTrace(); 
           Toast.makeText(this, "Cannot load repositories", Toast 
             .LENGTH_SHORT).show(); 
          })); 

が別のメソッドにサブスクライブ()メソッドでは、抽象のすべてのコードに方法はありますか?私はこれをやってみました:

private DisposableSingleObserver<List<GithubRepo>> getRepos(){ 
    return (List<GithubRepo> value) -> { 
     if (!value.isEmpty()) { 
      ArrayAdapter<GithubRepo> adapter = new ArrayAdapter<GithubRepo> 
        (MainActivity.this, 
          android.R.layout.simple_spinner_dropdown_item, value); 
      reposSpinner.setAdapter(adapter); 
      reposSpinner.setEnabled(true); 
     } else { 
      showEmptyRepoAdapterState(); 
     } 
    }, 
    (Throwable e) -> { 
     e.printStackTrace(); 
     Toast.makeText(this, "Cannot load repositories", Toast 
       .LENGTH_SHORT).show(); 
    }; 
}; 

私はエラーが発生します:ラムダ変換のターゲットタイプは、インターフェイスでなければなりません。

だから、このコードをリファクタリングする方法はありますか?予想される戻り値をどのように知ることができますか?

答えて

2

私はそれを理解しました。

compositeDisposables.add(githubService.getRepos() 
        .subscribeOn(Schedulers.io()) 
        .observeOn(AndroidSchedulers.mainThread()) 
        .subscribe(
          successResponse(), 
          errorResponse() 
        )); 

そしてパラメータはのように見えた:

private Consumer<List<GithubRepo>> successResponse() { 
    return (List<GithubRepo> value) -> { 
     if (!value.isEmpty()) { 
      ArrayAdapter<GithubRepo> adapter = new ArrayAdapter<GithubRepo> 
        (MainActivity.this, 
          android.R.layout.simple_spinner_dropdown_item, value); 
      reposSpinner.setAdapter(adapter); 
      reposSpinner.setEnabled(true); 
     } else { 
      showEmptyRepoAdapterState(); 
     } 
    }; 
} 

そして

 private Consumer<Throwable> errorResponse() { 
    return (Throwable e) -> { 
     e.printStackTrace(); 
     Toast.makeText(this, "Cannot load repositories", Toast 
       .LENGTH_SHORT).show(); 
    }; 
} 
コードの巨大なブロックが、私はこれにリファクタリングすることができていたので、私は必要な2つの消費者のパラメータを使用メソッドのシグネチャ
関連する問題