多个请求发布到服务器(改造)

时间:2017-11-30 10:48:21

标签: android

我正在使用改造将请求发布到服务器,但它是两次发布数据。我检查了代码,我只是随叫随到。我知道改造试图一次又一次地连接服务器,直到它连接或超时,但如果一旦数据发布到服务器,我得到服务器的响应,而不是为什么改造再次调用相同的。

 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;

}

}

1 个答案:

答案 0 :(得分:0)

For Retrofit 2

在Web服务实例中定义一个侦听器:

public interface OnConnectionTimeoutListener {
    void onConnectionTimeout();
}

向您的网络服务添加拦截器:

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());
}