2017-07-29 60 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:已建立的连接被主机中的软件中止” –