使用Observables(RxJava,翻新版)时API调用失败

时间:2019-04-06 00:56:16

标签: android retrofit2 rx-java2

我对RxJava还是很陌生,所以请多多包涵。我正在尝试使用Retrofit对纽约时报API进行API调用,但是我只能在界面中使用“ Call <...>”而不是“ Observable <...>”时成功进行API调用。

在我的界面中,我有两个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()));

这显然意味着我在界面上做错了。有人能指出我正确的方向,因为我猜这里有一个非常简单的修复程序,我只是没看到。

0 个答案:

没有答案