2011-03-10 106 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