2017-07-29 69 views
0

我正在致力於通過改進庫調用「球衣」服務的android應用程序。 當我的服務需要很長時間時,提出超時例外。 我使用下面的代碼來處理超時異常。通過改進的Web服務調用中的超時異常

final OkHttpClient client = new OkHttpClient(); 
client.setConnectTimeout(120, TimeUnit.SECONDS); 
client.setReadTimeout(120, TimeUnit.SECONDS); 
client.setWriteTimeout(120, TimeUnit.SECONDS); 

restAdapter = new retrofit.RestAdapter.Builder() 
     .setEndpoint(URL) 
     .setErrorHandler(new MyErrorHandler()) 
     .setLogLevel(retrofit.RestAdapter.LogLevel.FULL) 
     .setClient(new OkClient(client)) 
     .build(); 

但30秒後服務調用失敗,我的響應正文爲空。

我認爲超時設置不起作用,改進 沒有等到我的服務處理完成,而服務正在服務器中運行,並且我在服務器中記錄了我的響應。

應用服務器:weblogic的

服務庫:球衣

Android的jar文件:okhttp-2.7.5,okhttp-的URLConnection-2.7.5,改裝的1.9.0

請幫我。

謝謝。

+0

的〔改造和OkHttpClient,在失敗的方法捕獲連接超時(可能的複製https://stackoverflow.com/questions/29921667/retrofit-and-okhttpclient-catch-connection- timeout-in-failure-method) – jmarkmurphy

回答

0

使用本

OkHttpClient httpClient = new OkHttpClient.Builder() 
      .addInterceptor(new Interceptor() { 
       @Override 
       public Response intercept(Chain chain) throws IOException { 
        Request.Builder ongoing = chain.request().newBuilder(); 
        ongoing.addHeader("Content-Type", "application/json; charset=utf-8"); 
        return chain.proceed(ongoing.build()); 
       } 
      }) 
      .connectTimeout(300, TimeUnit.SECONDS) 
      .readTimeout(300, TimeUnit.SECONDS) 
      .writeTimeout(300, TimeUnit.SECONDS) 
      .build(); 

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(Constants.URL_API) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(httpClient) 
      .build(); 
+1

謝謝,我用過這個,但沒有工作! –

+0

也許服務器拒絕您的請求。 –

+0

30秒後,翻新得到一個空響應,但在服務器和weblogic中創建響應,引發此異常「java.io.IOException:已建立的連接被主機中的軟件中止」 –