【问题标题】:Android java.lang.NoSuchFieldErrorAndroid java.lang.NoSuchFieldError
【发布时间】:2012-06-16 14:36:30
【问题描述】:

在某些情况下,当从匿名类访问活动字段时,我在运行时收到 NoSuchFieldError:java.lang.NoSuchFieldError: MyActivity.myField

编辑:我现在确定这是一个 Android 问题,因为一切都正确编译但在运行时解析不正确。当更改为 MyActivity.this.myField 而不是普通的 myField 时,一切正常。

顺便说一句,我重新检查了,我在其他任何地方都没有任何其他 myField,此外,在 Eclipse 中打开声明时,它会转到预期的字段 (myField)。

唯一的问题是我无法在示例项目中重现这一点。我只能声明这是我项目中的一个特定问题,但我不愿意这样做,我不能发布这个项目。

我会保持打开状态,以防有人偶然发现类似的东西。

这是我可以发布的代码,它会导致我的项目崩溃,而不是示例代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MyActivity.this, myField.getName(), Toast.LENGTH_SHORT).show();
        }
    }.run();
}

【问题讨论】:

  • 谁投反对票,请解释原因,以便我提供更好的问题。
  • 不知道?..但请提供代码............
  • 你投了反对票(我没有)可能是因为你没有添加代码,没有代码我们可以做任何事情。
  • 编写示例代码重现...
  • 我无法创建重现此内容的项目。它只发生在我的项目上。我想这是我的错,但我不能发布这个项目。无赖。

标签: android


【解决方案1】:

似乎使用类前缀访问字段可以解决它:MyActivity.this.myField

奇怪。我猜这与 Android 在运行时的字段解析有关。

【讨论】:

  • 奇怪的是它编译了 .也许您将匿名类强制添加到外部类之一?类似于: ((MyActivity)this).myField... ?
  • 不,我没有那样做。此外,在调试中,我在有问题的行上暂停,并查看该字段是否存在并具有预期的内容。这太奇怪了 - 我无法在新的示例项目中重现它。
  • 能否发下相关代码?确实很奇怪。
  • 我不能全部发布,我会发布一些东西。
猜你喜欢
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2015-10-10
  • 2013-06-05
  • 2013-01-04
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多