什么是 NoSuchMethodError,如何修复它?

What is a NoSuchMethodError and how do I fix it?

提问人:nvoigt 提问时间:9/24/2020 最后编辑:nvoigt 更新时间:10/12/2023 访问量:4549

问:

我有一些代码,当我运行时它会产生一个错误,说:

NoSuchMethod:在 null 上调用了方法“XYZ”

这是什么意思,我该如何解决?

flutter 飞镖 null nosuchmethoderror nosuchmethod

评论

4赞 nvoigt 9/24/2020
这应该是一个规范的欺骗目标。请参阅 meta.stackoverflow.com/questions/401321/...。随意改进 Q 或 A。
2赞 TylerH 10/23/2020
在不了解 Flutter/Dart 的情况下,我猜这相当于什么是 NullReferenceException,我该如何解决它?
1赞 nvoigt 10/23/2020
@TylerH这是正确的
1赞 nvoigt 11/5/2020
它与它没有任何关系,除此之外,那个人也有这个错误。如何解决它的解决方案在这里的答案中。
1赞 Dmytro Rostopira 12/25/2020
我认为标题包含而不是,与日志中显示的方式相同NoSuchMethodErrorNoSuchMethod error

答:

25赞 nvoigt 9/24/2020 #1

为什么会出现此错误?

作为现实世界的比较,刚刚发生的是这样的对话:

嘿,汽车油箱里还剩多少油?

你在说什么,我们没有车

这正是您的程序中正在发生的事情。你想调用一个函数,比如,但没有汽车,变量是。_car.getGasLevel();_carnull

显然,在您的程序中,它可能不是汽车。它可以是一个列表或一个字符串,或者其他任何东西。

技术说明

您正在尝试使用一个变量,即 。要么您已将其显式设置为 ,要么根本无法设置它,则默认值为 。nullnullnull

与任何变量一样,它可以传递到其他函数中。出现错误的地方可能不是源。您必须遵循从实际值到最初来源的线索,以找到问题所在以及解决方案可能是什么。null

null可以有不同的含义:未设置为另一个值的变量将是 ,但有时程序员故意使用 null 值来表示没有值。数据库具有可为 null 的字段,JSON 具有缺失值。缺失的信息可能确实是信息本身。例如,该变量可用于用户说“是”时、用户拒绝时以及用户尚未选择某些内容时。这不是一个错误,它是故意使用的,需要相应地处理。nullbool userWantsPizzaForDinner;truefalsenull

我该如何解决?

找到它

使用错误消息附带的堆栈跟踪来准确找出错误所在的行。然后在该行上设置断点。当程序命中断点时,检查变量的所有值。其中之一是,找出是哪一个。null

修复它

一旦你知道它是哪个变量,就找出它是如何最终成为 的。它是从哪里来的?这个值从一开始就没有设定过吗?该值是另一个变量吗?这个变量是如何得到它的值的。这就像一行面包屑,你可以遵循,直到你到达一个点,你发现某个变量从未被设置过,或者你到达一个点,你发现一个变量被故意设置为 。如果是无意的,只需修复它。将其设置为您希望它具有的值。如果是故意的,那么你需要在程序中进一步处理它。也许你需要另一个人为这种情况做一些特别的事情。如有疑问,您可以询问故意将其设置为他们想要实现的目标的人。nullnullifnull

-1赞 Javeed Ishaq 5/17/2021 #2

只是您尝试从类访问的变量/函数不存在:

someClass.xyz();

以上将给出错误

NoSuchMethod: the method 'xyz' was called on null

因为该类不存在。someClass

以下操作将正常工作:

// SomeClass created
// SomeClass has a function xyz

class SomeClass {
  SomeClass();

  void xyz() {
    print('xyz');
  }
}

void main() {

  // Create an instance of the class
  final someClass = SomeClass();

  // Access the xyz function
  someClass.xyz();
}

评论

0赞 nvoigt 10/29/2021
如果它没有被定义,它就不会首先编译。情况正好相反:是。someClassnull