2012-06-15 43 views
1

我想在移动Android应用程序中使用odata4j库。有时候,HTTP请求没有得到响应,因为设备在发送请求后丢失了移动连接。经过几次尝试重现并计时后,我发现图书馆大约需要27分钟才会抛出“java.net.SocketException:Connection timed out”。有什么办法可以减少这种超时,所以我可以小心并更快地处理故障?谢谢。如何减少由odata4j发送的HTTP请求的超时

回答

3

我想为@John Spurlock answer提供代码段。通过类似的代码http://code.google.com/p/odata4j/source/browse/odata4j-jersey/src/main/java/org/odata4j/jersey/consumer/behaviors/AllowSelfSignedCertsBehavior.java

private static ODataJerseyConsumer createOdataConsumer(final String odataServerUrl) { 

    Builder builder = ODataJerseyConsumer.newBuilder(odataServerUrl); 
    builder.setClientBehaviors(TimeoutBehavior.reduceTimeout()); 
    return builder.build(); 
} 

private enum TimeoutBehavior implements JerseyClientBehavior { 
    INSTANCE; 

    @Override 
    public ODataClientRequest transform(final ODataClientRequest request) { 

     return request; 
    } 

    @Override 
    public void modify(final ClientConfig clientConfig) { 

     Map<String, Object> properties = clientConfig.getProperties(); 
     properties.put(ClientConfig.PROPERTY_CONNECT_TIMEOUT, 10 * 1000); 
     properties.put(ClientConfig.PROPERTY_READ_TIMEOUT, 10 * 1000); 
    } 

    @Override 
    public void modifyClientFilters(final Filterable filterable) {} 

    @Override 
    public void modifyWebResourceFilters(final Filterable filterable) {} 

    public static OClientBehavior reduceTimeout() { 

     return TimeoutBehavior.INSTANCE; 
    } 
} 
+0

伟大的片段,感谢分享。 – Nestor