Android Things 上的 IncompatibleClassChangeError

脱线

更新到最新的 Android Things 预览版后,我的应用程序在通过按钮 GPIO 设置回调时崩溃。我定义了以下按钮回调:

private class ButtonCallback extends GpioCallback {
    @Override
    public boolean onGpioEdge(Gpio gpio) {
        boolean isPressed = false;
        try {
            isPressed = gpio.getValue();
        } catch (IOException e) {
            Log.w(TAG, "Error", e);
        }

        if (isPressed) {
            ...
        }
        return true;
    }
}

我在应用程序中使用 GPIO 注册它,如下所示:

Gpio button = ...;
try {
    button.registerGpioCallback(new ButtonCallback());
} catch (IOException e) {
    Log.w(TAG, "Error configuring GPIO pins", e);
}

当我运行我的应用程序时,我得到一个IncompatibleClassChangeError应用程序崩溃:

java.lang.IncompatibleClassChangeError: Superclass com.google.android.things.pio.GpioCallback of com.google.android.things.example.MainActivity$ButtonCallback is an interface (...)

此代码之前有效,为什么更新后开始发生这种情况?

脱线

从预览版 7 开始,许多外设 I/O 接口从抽象类转换为接口。这样做是为了更好地促进应用程序的可测试性,因为接口更容易模拟。

请务必更新您的应用以使用 Preview 7 SDK:

dependencies {
    compileOnly 'com.google.android.things:androidthings:0.7-devpreview'
}

然后修改您的回调以实现接口:

private class ButtonCallback implements GpioCallback {
    @Override
    public boolean onGpioEdge(Gpio gpio) {
        boolean isPressed = false;
        try {
            isPressed = gpio.getValue();
        } catch (IOException e) {
            Log.w(TAG, "Error", e);
        }

        if (isPressed) {
            ...
        }
        return true;
    }
}

查看 Android Things API 参考以验证您正在调用的任何其他 API 是否已更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章