Futures.addCallback(appProductionComponent.gitHubApi(),
new FutureCallback<GitHubApi>() {
@Override
public void onSuccess(GitHubApi result) {
GitHubSearcherApplication.this.api = result;
}
@Override
public void onFailure(Throwable t) {
}
});
Zrób re-throw, nie wiem, zaloguj(chociaż nie wiem czy w androidzie ma to sens, może wyślij gdzieś gdzie możesz zbierać logi - jakiś agregator po RESTcie pewnie jest dostępny)
view.setProgressIndicator(true);
if (savedInstanceState != null){
user = Parcels.unwrap(savedInstanceState.getParcelable(ARG_USERNAME));
onGetUser(user);
}else if (activity.getIntent().hasExtra(ARG_USERNAME)){
String name = activity.getIntent().getStringExtra(ARG_USERNAME);
getUserByLogin(name);
}
nie wiem jaka jest konwencja na pisanie takich handlerów, ale jak to czytam jako noob który nie wie o co chodzi, to nie wiem o co chodzi :)
a jakbym widział np:
view.setProgressIndicator(true);
if (savedInstanceState != null){
zrobCostam();
}else if (activity.getIntent().hasExtra(ARG_USERNAME)){
pupabladaCostam();
}
to bym nie wiedział trochę mniej niż nie wiem teraz :)
SearchHistory search = new SearchHistory();
search.setSearchString(searchString);
search.setSearchDate(getCurrentDate());
search.setNumberOfResults(numberOfResults);
Ja bym tu builder jakiś zrobił, albo przynajmniej coś takiego
SearchHistory searchHistory = SearchHistory.of(searchString, getCurrentDate(), numberOfResults);
Dodatkowo, ma to taką zalete że możesz sobie wszystkie pola oznaczyć jako final - co daje gwarancje widzialności w JMM, i możesz bezpiecznie zrobić
SearchHistory searchHistory = SearchHistory.of(searchString, getCurrentDate(), numberOfResults);
service.toZwracaObservable
.flatMap(costam -> service.pupa(costam,searchHistory))
...
Jak Twój obiekt będzie miał nie finalne pola, to nie masz gwarancji że ta flatMapa nie wywoła się w innym wątku z jakieś puli wątków i obiekt searchHistory który został przekazany będzie w pełni widzialni (bo nic nie wywołało store czy read barrier )
P.S tutaj, jakby ktoś chciał się z tym kłócić (tak jak ostatni jakiś wojownik z żółtym avatarem) to odsyłam http://stackoverflow.com/questions/8019695/what-is-object-publishing-and-why-do-we-need-it
@Override
public Observable<SearchHistory> getHistory() {
return realm.where(SearchHistory.class).findAllSorted(ORDERBY_FIELD, Sort.DESCENDING)
.asObservable()
.flatMap(histories -> Observable.from(histories))
.take(HISTORY_SIZE);
}
Ja bym uważał z tymi flatMapami - pamiętaj że coś o wewnętrznie subskrybuje się do obiektu zwróconego z flatMapy (czyli tutaj Observable.from(histories)) - może wykonać się w innym wątku :) Tutaj jest ok, ale warto o tym wiedzieć. Dodatkowo flatMapa nie gwarantuje kolejności :)
Żeby powiedzieć coś więcej, napisz więcej logiki, po-uderzaj więcej do jakichś RESTowych endpointów - opakuj te calle może w Hystrixa (https://github.com/Netflix/Hystrix) ?