0
我實現了一個try塊,做一些網絡請求,但每當它拋出一個異常,例如有超時之一,android的應用程序將顯示一條消息說安卓顯示我自己的錯誤消息I來自一個異常
對不起:應用程序已經意外停止,請重試。
呈現給用戶的唯一選項是強制關閉按鈕。我想趕上這個異常,並簡單地顯示我自己的錯誤消息,並讓用戶再次嘗試連接,而不是用戶不得不關閉應用程序。
這裏是下面的代碼:
所有我想要做的是返回null一個異常被捕獲,什麼調用這個不斷類會做自己的錯誤處理類似這樣的後:
if(postRequest == null){ display error message}
private HttpResponseObject PostRequest() {
//int response = 0;
String responseBody = "";
HttpResponseObject response = new HttpResponseObject();
try {
Log.d(TAG, "IN POST_REQUEST_METHOD");
Log.d(TAG, "URL : " + url);
httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1);
//httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5);
Log.d(TAG, "httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);");
post = new HttpPost(url);
// ClientConnectionRequest connRequest = new ManagedClientConnection();
// post.setConnectionRequest((ClientConnectionRequest) connRequest.getConnection(3000, TimeUnit.MILLISECONDS));
ByteArrayEntity entity = new ByteArrayEntity(data.getBytes());
entity.setChunked(true);
post.setEntity(new StringEntity(data));
HttpResponse httpResponse = httpclient.execute(post);
HttpEntity resEntity = httpResponse.getEntity();
if (resEntity != null) {
// indicate that the content of this entity is no longer
// required
response.setResponseBody(EntityUtils.toString(resEntity));
Header[] header = httpResponse.getAllHeaders();
Log.d(TAG, "httpResponse.getAllHeaders() = " + header[0].getName());
response.setResponseHeader(httpResponse.getAllHeaders().toString());
resEntity.consumeContent();
}
// release all recources from the httpClient object
httpclient.getConnectionManager().shutdown();
response.setResponseCode(httpResponse.getStatusLine().getStatusCode()) ;
Log.d(TAG, "responseBody = " + response.getResponseBody());
Log.d(TAG, "response code = " + response.getResponseCode());
Log.d(TAG, "response header = " + response.getResponseHeader());
return response;
} catch (SocketTimeoutException e) {
e.printStackTrace();
Log.d(TAG, "SocketTimeoutException e = " + e.toString());
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d(TAG, "IOException e = " + e.toString());
return null;
}
}
拋出異常的類型是java.net.SocketTimeoutException,我已經捕獲了。 – jonney 2010-12-16 10:24:06
固定。就像你說的那樣,我的網絡代碼沒有什麼新意,我期待着來自另一個使用這個網絡代碼的課程並修復它。隊友的歡呼聲 – jonney 2010-12-16 10:30:54