number nfe example android string nullpointerexception long-integer string-parsing

android - nfe - Long.getLong() falla, devuelve nulo a una cadena válida



number format exception in java example (5)

Pasé las últimas dos horas depurando lo que parece extremadamente improbable. Deshice el método de una Actividad secundaria de Android para exactamente esto:

public void onClick(View v) { String str = "25"; long my_long = Long.getLong(str); } // onClick (v)

Y sí, tengo un choque con la buena y antigua NullPointerException:

09-11 02: 02: 50.444: ERROR / AndroidRuntime (1588): controlador no capturado: el hilo sale principal debido a una excepción no detectada 09-11 02: 02: 50.464: ERROR / AndroidRuntime (1588): java.lang.NullPointerException

Parece (de otras pruebas) que Long.getLong (str) devuelve NULL, lo que me está volviendo loco. ¿QUÉ ME ESTOY PERDIENDO?

Gracias por adelantado. Estoy de acuerdo con perder estúpidamente lo obvio, pero mi cordura está en juego.


Creo que está utilizando la función incorrecta use Long.parseLong (str) entonces puede obtener la respuesta correcta.


Long.parseLong (someString) aprobado. No te olvides de atrapar NumberFormatException si hay una probabilidad de cadena irreparable.


Para entender esto, algunos ejemplos:

Long val= Long.getLong("32340");

vuelve: null

Long val = Long.getLong("32340", 3000);

devoluciones: 3000

Usando Long.parseLong() :

Long val = Long.parseLong("32340");

devoluciones: 32340

La documentación describe el método getLong() como:

Devuelve el valor Long de la propiedad del sistema identificada por una cadena.

este es el código del método getLong () y solo obtiene un valor de propiedad definido por una cadena:

public static Long getLong(String string) { if (string == null || string.length() == 0) { return null; } String prop = System.getProperty(string); if (prop == null) { return null; } try { return decode(prop); } catch (NumberFormatException ex) { return null; } }

Si desea analizar un String a Long, la mejor manera es usar el método Long.parseLong() .


Puede usar Long.parseLong(String) , en lugar de getLong(String) : resolverá el problema.


Te estás perdiendo el hecho de que Long.getLong(String str) no debe analizar una Cadena por mucho tiempo, sino más bien devolver un valor largo de una propiedad del sistema representada por esa cadena. Como otros han sugerido, lo que realmente necesita es Long.parseLong(String str) .