Encontré pocas respuestas aquí sobre cómo manejar esta excepción, pero no hubo explicación de por qué sucedería esto en primer lugar. Tengo el siguiente código:
for (Map.Entry<String, Double> entry: qosMap.entrySet()) { JSONObject qosEntry = new JSONObject(); try { qosEntry.put(entry.getKey(), entry.getValue()); } catch (JSONException ex) { Logger.getLogger(JSONUtil.class.getName()).log(Level.SEVERE, null, ex); } }El qosMap nunca estará vacío y los datos de este mapa siempre serán válidos.
¿Cuál sería un caso en el que se lanzaría la excepción? ¿Por qué necesito tener este código extra?
verifique los documentos de Java
"Si un valor es un número no finito o si un nombre está duplicado".
https://docs.oracle.com/middleware/maf222/mobile/api-ref/oracle/adfmf/json/JSONObject.html
Suponiendo que está utilizando JSONObject de org.json
org.json.JSONObject.put(String, double) : JSONObjectPone un par clave/ doble en el JSONObject.
Parámetros:
clave: Una cadena clave. valor: Un doble que es el valor.
Devoluciones: this
Lanza:
JSONException Si la clave es nula o si el número no es válido.
Sé que los datos siempre son válidos. ¿Por qué necesito tener este código extra?
Puede hacer que el método arroje la excepción, ya que no le gusta saturar su código y también parece que no puede hacer nada útil al detectar la excepción.
Es obvio que sabes que los datos que pasaste son válidos. Sin embargo, la biblioteca no lo sabrá. Es por eso que lanza una excepción verificada solo para informarle en caso de que falle.
Para todos los tipos T, JSONObject.put(String key, T value) arroja una excepción JSONException cuando la clave es nula o el valor es un # no finito. Para el tipo doble, también se genera una excepción JSON si el valor doble no es válido. Ver:
https://docs.oracle.com/middleware/maf222/mobile/api-ref/oracle/adfmf/json/JSONObject.html https://developer.android.com/reference/org/json/JSONObject.html