2017-10-19 15 views
0
com.squareup.retrofit2:retrofit:2.3.0 

マイ手順:Android:Retrofit:複数の連続した非同期リクエスト。 Тoo多くのネストされたアイテム

  1. スタート非同期リクエスト:getCompaniesList()
  2. 待ち成功応答
  3. スタート別の非同期リクエスト:getCatalogsList()
  4. 待ち成功応答
  5. 別のコードを実行する

ここに私の活動のスニペット:

RestClient restClient = RestClientFactory.getRestClient(); 
     Call<List<Company>> companyList = restClient.getCompaniesList(filters); 

     companyList.enqueue(new Callback<List<Company>>() { 
      @Override 
      public void onResponse(Call<List<Company>> call, Response<List<Company>> response) { 
       if (response.isSuccessful()) { 
        RestClient restClient = RestClientFactory.getRestClient(); 

        Call<List<Catalog>> catalogList = restClient.getCatalogsList(filters); 
        catalogList.enqueue(new Callback<List<Catalog>>() { 
         @Override 
         public void onResponse(Call<List<Catalog>> call, Response<List<Catalog>> response) { 
          if (response.isSuccessful()) { 
           // HERE SOME NEED CODE!!! 
          } 
         } 

         @Override 
         public void onFailure(Call<List<Catalog>> call, Throwable throwable) { 

         } 
        }); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<Company>> call, Throwable throwable) { 

      } 
     }); 

私はこの構造が非常にいいとは思いません。 多くのネストされたアイテム。結果コードはより複雑です。

質問:この構造の代替手段はありますか?

+1

のようにコードを分割することができます。 –

+0

私は同じ問題を抱えています。より見栄えの良いコードのための醜い解決策は、成功したときにインターフェイスを通知し、各インターフェイスで作業を行うことです。しかし、@ジョンが述べたように、[RxJava](https://www.captechconsulting.com/blogs/getting-started-with-rxjava-and-android)をチェックするか、[Otto](http://square.github。 io/otto /)library – riadrifai

答えて

1

あなたは

RxのRXjava2を学ぶのに時間がかかることがいずれか、またはあなたはこのような何かのための `RxJava`を使用することをお勧めします。この

RestClient restClient = RestClientFactory.getRestClient(); 
Call<List<Company>> companyList = restClient.getCompaniesList(filters); 

companyList.enqueue(getCompanyListCallback()); 

private Callback<List<Company>> getCompanyListCallback() { 
    return new Callback<List<Company>>() { 
     @Override 
     public void onResponse(Call<List<Company>> call, Response<List<Company>> response) { 
      if (response.isSuccessful()) { 
       RestClient restClient = RestClientFactory.getRestClient(); 
       Call<List<Catalog>> catalogList = restClient.getCatalogsList(filters); 
       catalogList.enqueue(getCatalogsListCallback()); 
      } 
     } 

     @Override 
     public void onFailure(Call<List<Company>> call, Throwable throwable) { 

     } 
    }; 
} 

private Callback<List<Catalog>> getCatalogsListCallback() { 
    return new Callback<List<Catalog>>() { 
     @Override 
     public void onResponse(Call<List<Catalog>> call, Response<List<Catalog>> response) { 
      if (response.isSuccessful()) { 
       // HERE SOME NEED CODE!!! 
      } 
     } 

     @Override 
     public void onFailure(Call<List<Catalog>> call, Throwable throwable) { 

     } 
    }; 
} 
+0

私は内側の項目をメソッドを分離するように動かす(getCatalogsListCallback()) - 良い解決策だと思います。結果として要素のネストが常に1になりました。そして、コードは読み取りのために簡単です。 – Alexei

+0

これがあなたの問題を解決するなら、私の答えをupvoteし、あなたの質問への正しい答えとしてそれを受け入れてください – Boukharist

関連する問題