Я новичок в RxJava, поэтому, пожалуйста, потерпите меня. Я пытаюсь выполнять вызовы API для API New York Times с использованием Retrofit, но я могу успешно выполнять вызовы API только при использовании «Call <...>» вместо «Observable <...>» в моем интерфейсе.
В моем интерфейсе у меня есть два запроса GET, и оба они делают один и тот же запрос, только один использует Observables вместо Call.
Я определил класс ArticleContents.java следующим образом:
public class ArticleContents{
String title;
public ArticleContents(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
Ниже приведены методы внутри моего интерфейса RequestHandler.java.
@GET("{medium}/{period}.json")
Observable<List<ArticleContents>> getArticles(@Path("medium") String medium, @Path("period") String period, @Query("api-key") String key);
@GET("{medium}/{period}.json")
Call<List<ArticleContents>> getArticlesCall(@Path("medium") String medium, @Path("period") String period, @Query("api-key") String key);
Когда я использую getArticlesCall (), я получаю ожидаемый список ArticleContents с правильными данными.
Однако, когда я использую getArticles (), возвращаемое Observable пусто. Так, например, когда я запускаю этот код внутри onCreate ():
Retrofit.Builder nytBuilder = new Retrofit.Builder()
.baseUrl("https://api.nytimes.com/svc/mostpopular/v2/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create());
Retrofit retroArticle= nytBuilder.build();
final RequestHandler mainRequestHandler = retroArticle.create(RequestHandler.class);
mainRequestHandler.getArticles("viewed", "7", API_KEY)
.subscribe(response -> Log.d("TITLE", response.get(0).getTitle()));
Ничто не регистрируется внутри logcat. Однако, когда я пытаюсь сделать то же самое с помощью Observable, созданного вручную (как показано ниже), он работает просто отлично.
List<ArticleContents> titles = new ArrayList<>();
ArticleContents one = new ArticleContents("one");
ArticleContents two = new ArticleContents("two");
ArticleContents three = new ArticleContents("three");
ArticleContents four = new ArticleContents("four");
titles.add(one);
titles.add(two);
titles.add(three);
titles.add(four);
Observable.just(titles)
.subscribe(response -> Log.d("TITLE", response.get(0).getTitle()));
Это явно означает, что я делаю что-то не так в моем интерфейсе. Может ли кто-нибудь указать мне правильное направление, потому что я предполагаю, что здесь есть очень легкое решение, которого я просто не вижу.