¿Qué es una buena práctica de tratar con algunas excepciones HTTP de tiempo de ejecución?

Tengo un pequeño método que se parece a esto:

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); } 

}

El método en sí es bastante simple, pero tiene un montón de excepciones que ocurren y no sé cómo debo manejarlos. Suprimirlos haciendo un simple'e.printStackTrace () 'no parece una buena idea, así que comencé a leer sobre las mejores prácticas de manejo de excepciones, pero todavía estoy un poco perdido. ¿Qué debo hacer con las excepciones?

Necesito hacer algo con mis excepciones porque no quiero devolver null del método. Devolver un null de mi método significa que el método que llama no tendrá ninguna idea de si una excepción ocurrió dentro de mi método.

¿Debería crear una excepción personalizada y aumentarla o debería simplemente aumentar las excepciones no comprobadas?

El método de llamada realmente no puede afectar mucho a mi método, es decir, puede ocurrir un SocketException si hubo un problema con la conectividad de red, y una IOException puede ocurrir si hubo un problema al leer el flujo. Lo máximo que puede hacer el método de llamada es volver a intentarlo más tarde.

Si vuelvo a lanzar todas las excepciones que he atrapado, el método de llamada sería simplemente plagado de bloques de manejo de excepciones.

(Lo siento si esto parece una pregunta trivial, simplemente estoy tratando de aprender a escribir mejor código Gracias.)

Crear una excepción dedicada, que tiene el nivel de abstracción adecuado (algo como UnstarTrackException). Lanzar una excepción, envolviendo la excepción original que capturó. De esta manera, el llamador sólo tendrá que manejar una excepción (supongo que todas las excepciones deben ser manejadas de la misma manera: retrying).

Si esta excepción debe comprobarse o no depende de su gusto. Si desea forzar a todas las personas que llaman a su método a que manejen esta excepción, haga de ella una excepción seleccionada. Si desea permitir que el llamante elija si desea manejar esta excepción o no, utilice una excepción de tiempo de ejecución.

Si este método está enterrado dentro de capas de código, y si una excepción sólo puede tratarse en la capa superior, una excepción de tiempo de ejecución es probablemente una mejor opción. Y, de hecho, a menos que sea el único llamador de este método, una excepción de tiempo de ejecución también es probablemente una mejor opción. Las excepciones comprobadas tienden a no ser utilizadas mucho hoy en día.

  • Excepción de URL malformada de Java
  • Encuentra la caja de encuadernación de un conjunto de Geopuntos Mapbox
  • ¿Pueden las tabletas hacer llamadas? (Telefonía)
  • Mantenimiento de cookies entre las solicitudes HTTP enviadas por Android Apps
  • ¿Los campos estáticos de las clases de actividad están garantizados para sobrevivir a un ciclo de creación / destrucción?
  • Archivos de lista de android contenidos en la subcarpeta de activos
  • ¿Soporta Android el cultivo de video?
  • En Java, ¿qué ocurre cuando se tiene un método con una palabra clave de visibilidad no especificada?
  • Acceda a config.properties desde AndroidManifest.xml
  • ¿Es posible desarrollarse para Android en Android?
  • ListView dinámico en la aplicación para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.