¿Qué es NoSuchMethodError y cómo lo soluciono?
Tengo un código y cuando lo ejecuto me da un error que dice:
NoSuchMethod: el método 'XYZ' se llamó en caso nulo
¿Qué significa eso y cómo lo soluciono?
¿Por qué recibo este error?
Ejemplo
Como comparación del mundo real, lo que acaba de suceder es esta conversación:
Hola, ¿cuánta gasolina queda en el tanque del auto?
¿De qué estás hablando? No tenemos coche.
Eso es exactamente lo que está sucediendo en su programa. Querías llamar a una función como _car.getGasLevel();
pero no hay auto , la variable _car
es null
.
Obviamente, en su programa puede que no sea un automóvil. Podría ser una lista o una cadena o cualquier otra cosa.
Explicación técnica
Estás intentando utilizar una variable que es null
. O lo ha configurado explícitamente en null
, o simplemente nunca lo configuró, el valor predeterminado es null
.
Como cualquier variable, se puede pasar a otras funciones. Es posible que el lugar donde aparece el error no sea la fuente. Tendrá que seguir las pistas desde el null
valor real hasta su origen original, para encontrar cuál es el problema y cuál podría ser la solución.
null
puede tener diferentes significados: las variables que no están configuradas con otro valor serán null
, pero a veces los programadores utilizan valores nulos intencionalmente para indicar que no hay ningún valor. Las bases de datos tienen campos que aceptan valores NULL, a JSON le faltan valores. De hecho, la información que falta puede ser la información misma. La variable, bool userWantsPizzaForDinner;
por ejemplo, podría usarse true
cuando el usuario dijo que sí, false
cuando el usuario rechazó y aún podría ser null
cuando el usuario aún no ha elegido algo. Eso no es un error, se usa intencionalmente y debe manejarse en consecuencia.
¿Cómo lo soluciono?
Encuéntralo
Utilice el seguimiento de la pila que vino con el mensaje de error para averiguar exactamente en qué línea estaba el error. Luego establezca un punto de interrupción en esa línea. Cuando el programa llegue al punto de interrupción, inspeccione todos los valores de las variables. Uno de ellos es null
, descubre cuál.
Arreglalo
Una vez que sepas qué variable es, descubre cómo terminó siendo null
. ¿De dónde vino? ¿Nunca se estableció el valor en primer lugar? ¿Era el valor otra variable? ¿Cómo obtuvo esa variable su valor? Es como una línea de rutas de navegación que puedes seguir hasta llegar a un punto donde descubres que alguna variable nunca se configuró, o tal vez llegas a un punto donde descubres que una variable se configuró intencionalmente null
. Si no fue intencional, simplemente arréglalo. Configúrelo al valor que desee que tenga. Si fue intencional, entonces debes manejarlo más abajo en el programa. Quizás necesites que otro if
haga algo especial en este caso. En caso de duda, puedes preguntarle a la persona que intencionalmente lo configuró para null
lo que quería lograr.