J'ai mon abonnement Observable qui ressemble à:Existe-t-il un moyen de refactoriser ce code 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();
}));
Est-il possible de faire abstraction de tout le code dans la méthode subscribe() à une méthode distincte? Je l'ai essayé de faire ceci:
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();
};
};
Mais je reçois une erreur: type cible d'une conversion lambda doit être une interface.
Alors, y a-t-il un moyen de refactoriser ce code? Comment puis-je même connaître la valeur de retour attendue?