我对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()));
这显然意味着我在界面上做错了。有人能指出我正确的方向,因为我猜这里有一个非常简单的修复程序,我只是没看到。