我有一個看起來像這樣的小方法:處理某些運行時HTTP異常的良好做法是什麼?
public static void unstarTrack(Context ctxContext, String strId) {
try {
HttpParams htpParameters = new BasicHttpParams();
List<NameValuePair> lstCredentials = new ArrayList<NameValuePair>();
lstCredentials.add(new BasicNameValuePair("t", String.valueOf(System.currentTimeMillis()/1000)));
lstCredentials.add(new BasicNameValuePair("__call", "favourites.removeSong"));
HttpPost htpPost = new HttpPost(API_URL);
htpPost.setEntity(new UrlEncodedFormEntity(lstCredentials));
htpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0");
htpPost.addHeader("Accept-Encoding", "gzip");
DefaultHttpClient dhcClient = new DefaultHttpClient(htpParameters);
HttpResponse resResponse = dhcClient.execute(htpPost);
Log.d(TAG, EntityUtils.toString(resResponse.getEntity()));
return;
} catch (SocketException e) {
throw new RuntimeException("problem with network connectivity.", e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("Encoding not supported.", e);
} catch (ClientProtocolException e) {
throw new RuntimeException("A protocol exception was encountered.", e);
} catch (ParseException e) {
throw new RuntimeException("An error occurred while trying to read the header elements.", e);
} catch (IOException e) {
throw new RuntimeException("An error occurred while trying to read response stream.", e);
}
}
的方法本身是很簡單,但它包含了許多例外,一個發生,我不知道我應該如何處理那些。通過做一個簡單的'e.printStackTrace()'來壓制他們似乎不是一個好主意,所以我開始閱讀異常處理最佳實踐,但我仍然有點失落。我應該如何處理例外情況?
我需要對我的例外做些事情,因爲我不想從該方法返回null
。從我的方法中返回一個null
意味着調用方法將無法瞭解我的方法內是否發生異常。
我應該創建一個自定義異常,並提出或應該簡單地引發未經檢查的異常?
調用方法不能真正做很多工作來影響我的方法,即一個SocketException
如果有與網絡連接問題可能會發生,如果有讀取流的問題,可能會出現一個IOException
。調用方法可以做的最多的事情就是稍後再試。
如果我重新拋出所有我已經陷入的異常,那麼調用方法就會被異常處理塊搞砸了。
(我很抱歉,如果這似乎是一個微不足道的問題,我只是想學寫更好的代碼。謝謝。)
你正在拋出異常,如果發生異常,你將不會返回null,你將不會返回任何東西。無論如何,你的方法被聲明爲「void」 - 你*不能*返回任何東西。 *如何處理異常完全取決於...您想如何處理異常。 –
只捕捉對用戶或您自己有所影響的異常。一個異常有一個getMessage()方法,可以在任何情況下使用,即使它捕獲catch(Exception e)。如果發生任何異常,也決定如何處理。應用程序是否終止?它應該顯示一條消息嗎?如果您針對某些異常提出了不同的答案,則只需要捕獲特殊的例外情況。 –