2011-03-10 49 views
3

从Android应用向外部服务器发送HTTP请求时重复使用DefaultHTTPClient的优缺点是什么?我在尝试定期使用HTTPGet请求时尝试重复使用DefaultHTTPClient,但我获得了随机套接字超时(特别是在使用3G时)。使用DefaultHTTPClient进行HTTPGet请求时的套接字超时

我的代码看起来像如下:

public class MyHTTPSender { 
    private DefaultHTTPClient mClient; 

    public MyHTTPSender() { 
    mClient = new DefaultHTTPClient(); 
    } 

    public void send(String httpAddress) { 
HttpGet get = new HttpGet(this.surrogateURL); 
    HttpResponse response = null; 
try { 
     response = httpClient.execute(get); 
     // ... consume entity if OK   
    } catch (Exception e) { 
    } finally { 
     if (response != null) { 
      // do some sanity checks to ensure Entity is there! 
      response.getEntity().consumeContent(); 
     } 
    } 
    } 
} 

我看不出什么毛病我在做什么。我有一个单独的处理程序,使HTTPPost请求,并完美地工作(使用不同的DefaultHTTPClient对象)。

有什么建议吗?

+0

我开始看到相同的行为,从Android 2.3.3开始。我的应用程序之前工作完美,但现在,升级到2.3.3后,我有时会得到java.net.SocketException:连接超时。我有20秒的套接字超时和连接超时。 – 2011-03-12 14:07:46

回答

1

你在什么API级别?

如果你在8或以上,你可能会考虑尝试AndroidHttpClient,它可能会有更好的套接字超时指定。

否则,您可能会检查如何创建DefaultHttpClient并尝试指定更长的超时。

+0

我正在使用API​​级别7.我可以使用类似手动设置超时值: httpget.getParams()。setParameter(“http.socket.timeout”,new Integer(5000)); 但这仍然无法解释为什么超时发生在第一位。记录服务器显示GET请求从未收到。但是,当我在不久之后发送POST请求时,服务器已成功接收到该请求! – Thira 2011-03-10 02:11:08