更新到最新的 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] 删除。
我来说两句