更新到最新的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 (...)
此代码之前有效,为什么在更新后才开始这样做?
答案 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是否已更改。