Неудачные вызовы API при использовании Observables (RxJava, Retrofit) - PullRequest
0 голосов
/ 06 апреля 2019

Я новичок в 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()));

Это явно означает, что я делаю что-то не так в моем интерфейсе. Может ли кто-нибудь указать мне правильное направление, потому что я предполагаю, что здесь есть очень легкое решение, которого я просто не вижу.

...