VIew构造函数的NoSuchMethodError

时间:2014-07-17 07:06:26

标签: java android

我在运行时实例化了一个View,99.99%的时间都可以运行,但有些用户报告说它崩溃了抛出NoSuchMethodError。

我正在实例化这样的View,这就是抛出错误的地方:

AddAPostView addAPostView = new AddAPostView(getContext());

这就是View的代码:

public class AddAPostView extends LinearLayout {

    public AddAPostView(Context context) {
        super(context);
        init();
    }

    public AddAPostView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public AddAPostView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
      ...
    }
}

我通过Google Analyics获得了报告,所以我只有生成错误的行。

有时像这样简单的代码会抛出如此剧烈的错误怎么可能?如何避免?

2 个答案:

答案 0 :(得分:2)

你的minSdk是什么?如果它低于11然后宾果。

在API 11中添加了三个参数构造函数。即使您没有使用它,在实例化类时,所有方法都需要查找并且繁荣NoSuchMethodError

3arg constructor api 11

developer.android.com/LinearLayout.html#LinearLayout(android.content.Context)

(由于你设置了targetSdk,它会在你的机器上编译。)

答案 1 :(得分:2)

NoSuchMethodError通常表示您编译的代码使用的类代码与抛出错误的代码不同。原则上,如果代码在编译时没有找到该方法,则代码将不会被编译。它编译好的事实意味着该方法在编译期间存在。此外,代码在运行时无法找到该方法的事实意味着它正在使用该类的不同版本。我更倾向于认为这是一个过时的代码问题,因为你提到只有少数用户报告错误。他们必须使用一些旧版本的代码或旧版本的依赖库。

请验证报告此错误的用户是否运行了最新的代码副本。此外,依赖库的版本应与用于编译的版本相同。我不是一个adroid开发人员,但我已经多次在Java世界中看到类似的案例,根本原因始终是版本。