2つのネットワークコールをどのように連鎖させることができるか理解できています。 retrofit2とrxJavaを使用しています。私はYelp APIを使用しており、キャプチャしたいビジネスのためのgson Pojoを既に持っています。しかし、ビジネスのためのAPI呼び出しにはレビューが含まれていないので、ビジネスを取得した後、別のネットワークコールを使ってレビューを取得する必要があります(最初の呼び出しからビジネスIDに基づいて)。retrofit2とrxjava - アンドロイドで2つの従属ネットワークコールを結合する方法
私は何が起こりたいのですか: 1.ビジネスIDを取得するためにAPI呼び出しを行います(指定された検索語ユーザーが指定されている場合)。 2.完了後、私はビジネスIDを使用してレビューを取得する必要があります。
両方とも異なるAPIコールです。ビジネスIDを取得するために
1呼び出しは次のようになります。
https://api.yelp.com/v3/businesses/search?term=delis&latitude=37.786882&longitude=-122.399972
とレビューを取得するための他の呼び出しは、このようなものです:
https://api.yelp.com/v3/businesses/molinari-delicatessen-san-francisco/reviews
だから、二コールは、からのデータに依存します最初の呼び出し。 retrofit2で
私は次のことをサービスとして設定している:
@GET("v3/businesses/search")
Observable<Businesses> getBusinessesRx(
@Query("term") String term,
@Query("latitude") String latitude,
@Query("longitude") String longitude);
@GET("v3/businesses/{id}/reviews")
Observable<Businesses> getReviewsRx(
@Path("id") String businessID);
をしかし、私は両方で企業のPOJOを使用しています注意してください。私はそれをすることができるかどうかは分かりません。ビジネスgson pojoは、検索用語を与えられた企業のグループを得るための最初の呼び出し(#1)です。しかし、もし私がレビューのための余分なフィールドとそれをどのように人口に埋めることができれば、私は気にしません。このようにして、私のビジネスクラスは見つけられたすべてのビジネスについてレビューを受けることができます。
これをRXjavaでどのように起動するのかよくわかりません。私はフラット・マップが必要だと知っていますが、使用するPOJOとそれを動作させる方法について少し混乱します。これはアンドロイドデバイス上にあります。
必要であれば、私企業のPOJOは、次のようになります。
public class Businesses {
@SerializedName("businesses")
@Expose
private List<Business> businesses = new ArrayList<Business>();
@SerializedName("total")
@Expose
private Integer total;
/**
*
* @return
* The businesses
*/
public List<Business> getBusinesses() {
return businesses;
}
/**
*
* @param businesses
* The businesses
*/
public void setBusinesses(List<Business> businesses) {
this.businesses = businesses;
}
/**
*
* @return
* The total
*/
public Integer getTotal() {
return total;
}
/**
*
* @param total
* The total
*/
public void setTotal(Integer total) {
this.total = total;
}
}
をし、(個々の事業のために)私のビジネスPOJOは次のようになります。
public class Business {
@SerializedName("image_url")
@Expose
private String imageUrl;
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("location")
@Expose
private Location location;
@SerializedName("rating")
@Expose
private Integer rating;
@SerializedName("price")
@Expose
private String price;
@SerializedName("categories")
@Expose
private List<Category> categories = new ArrayList<Category>();
@SerializedName("phone")
@Expose
private String phone;
@SerializedName("review_count")
@Expose
private Integer reviewCount;
@SerializedName("coordinates")
@Expose
private Coordinates coordinates;
@SerializedName("url")
@Expose
private String url;
/**
*
* @return
* The imageUrl
*/
public String getImageUrl() {
return imageUrl;
}
/**
*
* @param imageUrl
* The image_url
*/
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
/**
*
* @return
* The id
*/
public String getId() {
return id;
}
/**
*
* @param id
* The id
*/
public void setId(String id) {
this.id = id;
}
/**
*
* @return
* The name
*/
public String getName() {
return name;
}
/**
*
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}
/**
*
* @return
* The location
*/
public Location getLocation() {
return location;
}
/**
*
* @param location
* The location
*/
public void setLocation(Location location) {
this.location = location;
}
/**
*
* @return
* The rating
*/
public Integer getRating() {
return rating;
}
/**
*
* @param rating
* The rating
*/
public void setRating(Integer rating) {
this.rating = rating;
}
/**
*
* @return
* The price
*/
public String getPrice() {
return price;
}
/**
*
* @param price
* The price
*/
public void setPrice(String price) {
this.price = price;
}
/**
*
* @return
* The categories
*/
public List<Category> getCategories() {
return categories;
}
/**
*
* @param categories
* The categories
*/
public void setCategories(List<Category> categories) {
this.categories = categories;
}
/**
*
* @return
* The phone
*/
public String getPhone() {
return phone;
}
/**
*
* @param phone
* The phone
*/
public void setPhone(String phone) {
this.phone = phone;
}
/**
*
* @return
* The reviewCount
*/
public Integer getReviewCount() {
return reviewCount;
}
/**
*
* @param reviewCount
* The review_count
*/
public void setReviewCount(Integer reviewCount) {
this.reviewCount = reviewCount;
}
/**
*
* @return
* The coordinates
*/
public Coordinates getCoordinates() {
return coordinates;
}
/**
*
* @param coordinates
* The coordinates
*/
public void setCoordinates(Coordinates coordinates) {
this.coordinates = coordinates;
}
/**
*
* @return
* The url
*/
public String getUrl() {
return url;
}
/**
*
* @param url
* The url
*/
public void setUrl(String url) {
this.url = url;
}
}