2016-10-26 7 views
2

リスト内の各アイテムの追加アイテムを追加するために、リスト内の各アイテムを呼び出そうとしています。私はretrofit + RxJavaを使用しています。リスト内のアイテムへのAndroid API呼び出し

各ユーザーが電話をかけ、都合のいい郵便番号で市を取得するために、ユーザーのリストを取得する必要があります。

どのように私はこれを取得しようとしています。

public void getUsers() { 
    Observable<List<User>> userObservable = mService.getUsers() 
      .flatMapIterable(new Func1<List<User>, Iterable<User>>() { 
       @Override 
       public Iterable<User> call(List<User> user) { 
        return users; 
       } 
      }) 
      .flatMap(new Func1<User, Observable<City>>() { 
       @Override 
       public Observable<City> call(User user) { 
        return mService.getCity(user.getAdress.getPostal_code); 
       } 
      }) 
      .map(new Func1<User, City>() { 
       @Override 
       public City call(User user) { 
        return user.getAdress().getCity().getName(); 
       } 
      }) 

サービス:

@GET("/somelink/users") 
Observable<List<User>> getUsers(); 

@GET("/somelink/users/{code}") 
Observable<City> getCity(@Path("code") String postalCode); 



public class User { 

    @SerializedName("id") 
    @Expose 
    private Integer id; 

    @SerializedName("name") 
    @Expose 
    private String name; 

    @SerializedName("adress") 
    @Expose 
    private Adress adress; 

    public Integer getId() { 
     return id; 
    } 

    public void setId(Integer id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.named = name; 
    } 

    public Adress getAdress() { 
     return adress; 
    } 

    public void setAdress(Adress adress) { 
     this.adress = adress; 
    } 

} 



public class Adress { 

    privare City; 

    @SerializedName("postal_code") 
    @Expose 
    private String postal_code; 

    @SerializedName("street") 
    @Expose 
    private String street; 

    public String getPostal_code() { 
     return postal_code; 
    } 

    public void setPostal_code(String postal_code) { 
     this.postal_code = postal_code; 
    } 

    public Adress getStreet() { 
     return adress; 
    } 

    public void setStreet(String street) { 
     this.street = street; 
    } 

    public City getCity() { 
     return city; 
    } 

    public void setCity(City city) { 
     this.city = city; 
    } 

} 


public class City { 

    @SerializedName("name") 
    @Expose 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

getUsers()マップ機能では

[ 
    { 
    "id": 1 
    "name": "John Doe", 
    "adress": { 
     "postal_code": "somecode", 
     "street": "some Street ..." 
    } 
    }, 
    { 
    "id": 2 
    "name": "Adam Smith", 
    "adress": { 
    "postal_code": "somecode", 
    "street": "some other Street ..." 
    } 
] 

を返し、私は "市がユーザーに適合するように、型変数のインスタンスが存在しない" エラーを得ました。私はエラーがモデルにあると思うが、それらを正しいものにする方法を知らない。私はRxjavaの初心者で、ここに問題があります。

+0

質問を編集してください。まだコンパイルすべきではないいくつかのエラーがあります。 –

答えて

1

この操作では、UserObservable<City>に戻そうとしています。

.flatMap(new Func1<User, Observable<City>>() { 
    @Override 
    public Observable<City> call(User user) { 
     return mService.getCity(user.getAdress.getPostal_code()); 
    } 
}) 

はその後、ここで、あなたは前の操作からObservable<City>を返されますが、このマップにUserを与え、そしてCityに変換しようとしています。

あなたはStringを返しuser.getAdress().getCity().getName();String

.map(new Func1<User, City>() { 
    @Override 
    public City call(User user) { 
     return user.getAdress().getCity().getName(); 
    } 
}) 

、あなたには、いくつかのCityを返すように望んでいることRxJavaはないと語りました。だから、

public class City { 

    @SerializedName("name") 
    @Expose 
    private String name; 

    public String getName() { 
     return name; 
    } 

私もあなたの代わりにそれ以上マッピングのObservable<City>に加入しなければならないと思いますけれども、私は、あなたが.map(new Func1<City, String>() {を意味だと思います。次に、RxJavaのサブスクライブモデルに従うと、そのメソッドからちょうどreturn mService.getUsers().flatMapIterable(...になり、最終的なマップ操作は中止されます。

+0

ok私はあなたの発言に基づいて編集しました、今私はエラーが発生しています "推測変数Rは互換性のない境界を持っています、等しい制約下限:リスト、下限:文字列" – Mdevv

+0

ごめんなさい、 –

+0

最後に最後の.map()セクション – Mdevv

関連する問題