2017-11-30 26 views
-3

私はretrofitを使用してリクエストをサーバーに送信していますが、データを2回転記しています。私はコードをチェックした、私は電話でのみ作った。私は、サーバーに接続するか、タイムアウトするまで何度もサーバーを接続しようとしていることを知っていますが、一旦データがサーバーに送信され、サーバーから応答が返ってくるのはなぜですか?複数のリクエストがサーバーに送信されました(改造)

Call<LoanSaveResponse> call = apiService.saveLoan(loan); 
    call.enqueue(new retrofit2.Callback<LoanSaveResponse>() { 
     @Override 
     public void onResponse(Call<LoanSaveResponse> call, Response<LoanSaveResponse> response) { 
      customProgressBar.stopProgressBar(); 
      Log.e(" response", new Gson().toJson(response)); 

      if (response != null) { 
       if (response.body() != null) { 
        // Showing Alert Message 
        showDialog(response.body().loan_id); 

       } 
      } 
     } 
     @Override 
     public void onFailure(Call<LoanSaveResponse> call, Throwable t) { 
      customProgressBar.stopProgressBar(); 
      Log.e("Failed", t.toString()); 
     } 
    }); 
} 

public class ApiClient { 
/*http://172.16.40.1:8080/loyalty/*/ 
//:http://54.83.7.62:8080/loyalty/userAnswer 
private static Retrofit retrofit = null; 


public static Retrofit getClient() { 
    if (retrofit==null) { 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
     OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build(); 


     retrofit = new Retrofit.Builder() 
       .baseUrl(GlobalBaseUrl.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(client) 
       .build(); 
    } 
    return retrofit; 

} 

}

+0

使用しているコードを入力してください –

答えて

0

レトロフィット2

については、Webサービス・インスタンスにリスナーを定義します。

public interface OnConnectionTimeoutListener { 
    void onConnectionTimeout(); 
} 

は、Webサービスにインターセプタを追加します。

public WebServiceClient() { 
    OkHttpClient client = new OkHttpClient(); 
    client.setConnectTimeout(10, TimeUnit.SECONDS); 
    client.setReadTimeout(30, TimeUnit.SECONDS); 
    client.interceptors().add(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
      return onOnIntercept(chain); 
     } 
    }); 
    Retrofit retrofit = new Retrofit.Builder() 
     .baseUrl(BASE_URL) 
     .addConverterFactory(GsonConverterFactory.create()) 
     .client(client) 
     .build(); 
    webService = retrofit.create(WebService.class); 
} 

あなたの同封try-catchブロックでコードをインターセプトし、例外が発生したときにリスナーに通知します。

private Response onOnIntercept(Chain chain) throws IOException { 
    try { 
     Response response = chain.proceed(chain.request()); 
     String content = 
UtilityMethods.convertResponseToString(response); 
     Log.d(TAG, lastCalledMethodName + " - " + content); 
     return; 
response.newBuilder().body 
(ResponseBody.create 
(response.body().contentType(), content)) 
.build();} 

catch (SocketTimeoutException exception) { 
     exception.printStackTrace(); 
     if(listener != null) 
      listener.onConnectionTimeout(); 
    } 

    return chain.proceed(chain.request()); 
} 
関連する問題