Android Things上的IncompatibleClassChangeError

时间:2018-03-06 23:25:14

标签: android-things

更新到最新的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 (...)

此代码之前有效,为什么在更新后才开始这样做?

1 个答案:

答案 0 :(得分:3)

从预览7开始,许多外围I / O接口都是从中转换而来的 接口的抽象类。这样做是为了更好地促进可测试性 在应用程序中,因为界面更易于模拟。

请务必更新您的应用以使用预览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内容API reference 验证您调用的任何其他API是否已更改。