【发布时间】:2018-06-24 19:48:29
【问题描述】:
我目前正在尝试第一次将 RxJava 与 Retrofit 一起使用,但似乎无法为我的特定用例提供任何工作:
我首先使用改造调用 API 来显示用户位置附近的电影院。 然后,我使用用户单击的影院 ID 来显示该影院的放映时间,即...
public interface ListingApiService
{
@GET("/get/times/cinema/{id}")
Call<ListingResponse> getShowtimes (@Path("id") String id);
}
Then using the interface....
public void connectAndGetApiData(String id)
{
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
ListingApiService listingApiService = retrofit.create(ListingApiService.class);
Call<ListingResponse> call = listingApiService.getShowtimes(id);
call.enqueue(new Callback<ListingResponse>() {
@Override
public void onResponse(Call<ListingResponse> call, Response<ListingResponse> response)
{
List<Listing> listings = response.body().getListings()
getAndDisplayImage(listings.get(0).getTitle());
recyclerView.setAdapter(new ListingAdapter(listings,R.layout.list_item_listing,getApplicationContext()));
}
@Override
public void onFailure(Call<ListingResponse> call, Throwable t)
{
Log.e(TAG,t.toString());
}
});
}
然后,我想调用不同的 API(上下文网络搜索)来为每个电影列表显示相关电影海报的图像(只是为了获得良好的视觉效果)。我知道如何为单个图像调用 API,但我不知道如何进行多次调用。我已经尝试使用在互联网上其他地方找到的 RxJava 代码,但它似乎都不起作用,因为我不知道我将进行多少次调用或搜索词将是什么。我用于单个调用的代码是:
public interface ListingImageApiService
{
//https://contextualwebsearch-websearch-v1.p.mashape.com/api/Search/ImageSearchAPI?count=1&autoCorrect=false&q=Donald+Trump
@Headers("X-Mashape-Key: apikey")
@GET("/api/Search/ImageSearchAPI?count=5&autoCorrect=false")
Call<ListingImageResponse> getListingImages (@Query("q") String term);
}
public void getAndDisplayImage(String search)
{
if (retrofit2 == null)
{
retrofit2 = new Retrofit.Builder()
.baseUrl(BASE_URL2)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
search = search + " poster";
ListingImageApiService listingImageApiService = retrofit2.create(ListingImageApiService.class);
Call<ListingImageResponse> call = listingImageApiService.getListingImages(search);
call.enqueue(new Callback<ListingImageResponse>() {
@Override
public void onResponse(Call<ListingImageResponse> call, Response<ListingImageResponse> response)
{
System.out.println(response.body().toString());
ListingImage a = new ListingImage();
List<ListingImage> listingImages = response.body().getListingImage();
System.out.println(listingImages.get(0).getUrl());
}
@Override
public void onFailure(Call<ListingImageResponse> call, Throwable t)
{
}
});
}
我的问题是,我将如何使用 RxJava 使用未知大小的电影标题列表的数据进行多次调用(我可以将其传递给 getAndDisplayImage 而不是单个字符串)?我进行了几次尝试,但似乎都不适用于我的用例。谢谢。
【问题讨论】:
-
您是否使用了来自
RxJava的map运算符?从第一个api 获取数据并使用运算符和请求图像将结果转换为新的observer。 -
您好,我已经研究了地图运算符,但我不知道它如何解决我的问题。我不知道如何对多个对象进行 API 调用。地图怎么可能做到这一点?是不是简单的对集合应用了一个函数,还是我误解了map的用途?
标签: android api rx-java retrofit2 rx-java2