次のような小さなメソッドがあります。
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
場合に発生する可能性があり、ストリームの読み取りに問題があった場合に発生する可能性があります。呼び出し元のメソッドができることは、後でこれを再試行することだけです。
トラップしたすべての例外を再度スローすると、呼び出し元のメソッドが例外処理ブロックでいっぱいになってしまいます。
(これが些細な質問のように思われる場合は申し訳ありません。私は単により良いコードを書くことを学ぼうとしています。ありがとう。)