2017-03-16 3 views
1

アプリでは、RxでRetrofit2を使用してGoogleのサーバーと通信します。私は変更baseUrl Retrofitで特定のHTTPエラーコードを取得したい場合。私は見つけたexample to change Request header on error with Interceptor. 私は複数の要求が合格するその場所以来、私はRetrofitでそのロジックを持っていることをお勧めします。 Rx retryWhen()を使用する他のソリューションは、プロジェクトアプリのさまざまな場所で多くのリクエストがあるため、使いにくいです。Retrofitで変更されたbaseUrlでhttpリクエストを再試行します。サーバからの特定のエラーの場合

答えて

0

あなたがRxJavaを使用している場合、最も簡単な方法は、例えばオペレータonErrorResumeNext

でチェーンに要求されますが、ベースURL XXXXと異なるbaseUrlに(whiteApiが失敗したときに呼び出される)と黒の改造blackApiwhiteApiあります

whiteApi.getCat().onErrorResumeNext(err-> blackApi.getCat()) ... 

blackApiが失敗した場合は、.onErrorReturn()とチェーンリクエストを送信して、応答を偽ることもできます。

0

単純に失敗した場合は、新しいベースURLを使用して別のレトロフィットインスタンスを作成してから、ジョブをクリアしてください。

0

はたぶん、あなたはあなたのサービスのためのクラスラッパーを作成することができます

public class ServiceGenerator { 
    public static String apiBaseUrl = "http://base.url/api"; 
    private static Retrofit retrofit; 

    private static Retrofit.Builder builder = 
      new Retrofit.Builder() 
        .addConverterFactory(relevantConverter) 
        .baseUrl(apiBaseUrl); 

    private static OkHttpClient.Builder httpClient = 
      new OkHttpClient.Builder(); 


    private ServiceGenerator() { 
    } 

    public static void changeApiBaseUrl(String newApiBaseUrl) { 
     apiBaseUrl = newApiBaseUrl; 

     builder = new Retrofit.Builder() 
         .addConverterFactory(relevantConverter) 
         .baseUrl(apiBaseUrl); 
    } 

    public static <S> S createService(Class<S> serviceClass, String baseUrl) { 
     builder.client(httpClient); 

    return builder.build().create(serviceClass); 
} 
    // your methods 
    // ... 
} 

とするとき、あなたのごHTTPエラーコードの呼び出しchangeApiBaseUrlを取得します()。

これが役に立ちます。

私の英語のために残念です。

関連する問題