¿Qué es NoSuchMethodError y cómo lo soluciono?

Resuelto nvoigt asked hace 3 años • 2 respuestas

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?

nvoigt avatar Sep 24 '20 21:09 nvoigt
Aceptado

¿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 _cares 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 nullvalor real hasta su origen original, para encontrar cuál es el problema y cuál podría ser la solución.

nullpuede 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 truecuando el usuario dijo que sí, falsecuando el usuario rechazó y aún podría ser nullcuando 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 ifhaga algo especial en este caso. En caso de duda, puedes preguntarle a la persona que intencionalmente lo configuró para nulllo que quería lograr.

nvoigt avatar Sep 24 '2020 14:09 nvoigt