2017-10-24 8 views
3

からシングル取得するにはどうすればDataHolderからいくつかのリストを取得する方法があります。RxJavaは私のプレゼンターには、ネストされた方法

public Single<Map<String, List<Attraction>>> getMonthOfAttractions(int monthInAdvance) { 
    Map<String, List<Attraction>> monthOfAttractions = monthlyAttractionsMap.get(monthInAdvance); 
    if (monthOfAttractions != null) 
     return Single.fromCallable(() -> monthOfAttractions); 
    else 
     return apiGetMonthOfAttractions(monthInAdvance); 

問題がapiGetMonthOfAttractions方法である:trueの場合、それは、サーバーからこのリストをダウンロードfalseの場合、私のリストを返します。私はプレゼンターに値を返すためにこのメソッドを正しく実装する方法を知らない。

私が何かしようとしました:

private Single<Map<String, List<Attraction>>> apiGetMonthOfAttractions(int monthInAdvance) { 
    cnkRetrofitProvider.getApiInterface().getAttractions(monthInAdvance) 
      .subscribeWith(new CnkApiObserver<AttractionListResponse>() { 
       @Override 
       public void onSucceeded(AttractionListResponse result) { 
        result.getMonthOfAttractions(); 
       } 

       @Override 
       public void onFailed(Error error) { 
       } 
      }); 
} 

をしかし、この場合、私は、「不足しているreturn文」を持っていると私はそれを実装する方法のアイデアのうちです。私はRxJavaを学びたいと思っていますので、理解してください。

助けてください:)

EDIT:

public interface CnkApiInterface { 

@GET("pl/front-api/{dateFrom}/{dateTo}") 
Single<AttractionListResponse> getAttractions(@Path("dateFrom") String dateFrom, @Path("dateTo") String dateTo);} 
+0

'AttractionListResponse'は' Map > 'を含んでいますか? – azizbekian

+0

はい、AttractionListResponseにはプライベートマップ> attractionListMapが含まれています。私は私が(私の最初の投稿を編集し、残念ながら私のCnkApiInterface – TheD3luxed

+0

を取得するために)(attractionListResponse.getMonthOfAttractionsを呼び出す必要があり は)完全に異なるタイプを返し、それは私が編集した – TheD3luxed

答えて

1

これはあなたが後にしているものです:あなたは常にだけList<Attraction>に結果をマッピングすることができます

private Single<Map<String, List<Attraction>>> apiGetMonthOfAttractions(int monthInAdvance) { 
    return cnkRetrofitProvider.getApiInterface() 
      .getAttractions(monthInAdvance) 
      .flatMap(attractionListResponse -> Single.just(attractionListResponse.getMonthOfAttractions())); 
} 
+0

私はあなたを愛していますazizbekian <3ありがとう – TheD3luxed

0

私の事はただのような何かをしよう(それはあなただけの何によって異なります これはどのように私のレトロフィットgetAttractions()メソッドは次のようになりますcnkRetrofitProvider.getApiInterface()。getAttractions(monthInAdvance)を返します)

private Single<Map<String, List<Attraction>>> apiGetMonthOfAttractions(int monthInAdvance) { 
    return cnkRetrofitProvider.getApiInterface().getAttractions(monthInAdvance) 

} 

トリックを行う必要があります

+0

を追加し、.getAttractionsきたその地図 – TheD3luxed

+0

を変更することはできません私の最初の投稿と私のCnkApiInterfaceを追加しました – TheD3luxed

+0

@ルーカスが投稿したものを見て、rxチェーンの地図機能を使用して、あなたの答えを必要なものにマップしてください –

0

ので、S @wojech_maciejewski答えはまだあなたに、マッピング機能を追加するJAST必要性を保持しています。

private Single<Map<String, List<Attraction>>> apiGetMonthOfAttractions(int monthInAdvance) { 
    return cnkRetrofitProvider.getApiInterface().getAttractions(monthInAdvance) 
          .map(atractions -> /* convert to List<Attraction> here */) 

} 
関連する問題