Android 事物上的 IncompatibleClassChangeError
IncompatibleClassChangeError on 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 (...)
此代码之前可以正常工作,为什么更新后开始出现这种情况?
从预览版 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 事情 API reference
验证您调用的任何其他 API 是否已更改。
更新到最新的 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 事情 API reference 验证您调用的任何其他 API 是否已更改。