我有一个看起来像这样的小方法:
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
从该方法返回。从我的方法返回 anull
意味着调用方法将无法了解我的方法内部是否发生了异常。
我应该创建一个自定义异常并引发它还是应该简单地引发未经检查的异常?
调用方法实际上不会对我的方法产生太大影响,即SocketException
如果网络连接出现问题,IOException
可能会发生 a,如果读取流出现问题,则可能会发生 a。调用方法最多可以做的是稍后重试。
如果我重新抛出我捕获的所有异常,调用方法只会充满异常处理块。
(如果这似乎是一个微不足道的问题,我很抱歉。我只是想学习编写更好的代码。谢谢。)