我正在寫一個文件上傳應用程序。我可以使用asyn方法連接到服務器並上傳文件(apache http)。
服務器已將連接數限制設置爲100.如果連接持續60秒,我想要設置連接超時以斷開連接。
以下是流程:
(1)Android客戶端建立與服務器的連接。 (開始計數爲60s)
(2)如果連接在60s後仍然存在,則斷開與Android客戶端的連接是否可以設置超時斷開建立的http連接?
我知道爲HttpParams設置超時不起作用。我不知道如何去做。
任何人有想法如何做到這一點?任何解決方案或建議是受歡迎的。謝謝!
下面是如何上傳文件的代碼片段:
try
{
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 60000);
HttpConnectionParams.setSoTimeout(httpParameters, 60000);
HttpClient client = new DefaultHttpClient(httpParameters);
...
ByteArrayBody bab = new ByteArrayBody(byteArray, "photo.jpg");
entity.addPart("photo", bab);
httpPost.setEntity(entity);
startTime = System.currentTimeMillis();
//ClientConnectionRequest connRequest = new ManagedClientConnection();
//httpPost.setConnectionRequest((ClientConnectionRequest) connRequest.getConnection(3000, TimeUnit.MILLISECONDS));
HttpResponse response = client.execute(httpPost, localContext);
Handler mHandler = new Handler();
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String result = "";
String tmp = "";
while ((tmp = reader.readLine()) != null)
{
result += tmp;
}
reader.close();
return result;
} catch (Exception e) {
Log.e(TAG, "error time = " + (System.currentTimeMillis() - startTime));
Log.e("httpUploadHandler", "Some error came up");
Log.e("httpUploadHandler", e.toString());
}
我可以斷開連接通過調用:
client.getConnectionManager().shutdown();
但我怎麼能算60秒到斷開活動連接?此外,是否有可能知道何時建立連接?
我的發送文件方法在擴展AsyncTask的類中。我得到'不能創建處理程序內部線程沒有調用Looper.prepare()'的錯誤。是否有任何解決方法來執行您的建議?感謝 –
2012-04-27 17:11:31
嘗試將此代碼放入AsyncTask的onPreExecute()中。 – Akhil 2012-04-27 17:17:31
謝謝,它的工作原理。我把'httpAsync.mRedrawHandler.doJob(60000);'之前「HttpResponse響應= client.execute(httpPost,localContext);」。但它不是我想要的100%。實際上,我想在連接建立成功後啓動'doJob(60000)'。有沒有可能檢測到它? – 2012-04-27 17:23:49