Java SQLiteDatabase';不实现接口';
当我使用作为 我有一个示例项目可以重新创建它: 使用扩展了以下内容的类: 堆栈跟踪:Java SQLiteDatabase';不实现接口';,java,android,android-sqlite,implements,Java,Android,Android Sqlite,Implements,当我使用作为 我有一个示例项目可以重新创建它: 使用扩展了以下内容的类: 堆栈跟踪: 12-14 12:23:43.719: E/AndroidRuntime(5179): FATAL EXCEPTION: main 12-14 12:23:43.719: E/AndroidRuntime(5179): java.lang.IncompatibleClassChangeError: interface not implemented 12-14 12:23:43.719: E/AndroidR
12-14 12:23:43.719: E/AndroidRuntime(5179): FATAL EXCEPTION: main
12-14 12:23:43.719: E/AndroidRuntime(5179): java.lang.IncompatibleClassChangeError: interface not implemented
12-14 12:23:43.719: E/AndroidRuntime(5179): at com.blundell.sqldatabasecursorerror.DatabaseHelper.close(DatabaseHelper.java:35)
12-14 12:23:43.719: E/AndroidRuntime(5179): at com.blundell.sqldatabasecursorerror.DatabaseHelper.openAndCloseDatabase(DatabaseHelper.java:29)
12-14 12:23:43.719: E/AndroidRuntime(5179): at com.blundell.sqldatabasecursorerror.MainActivity.onCreate(MainActivity.java:13)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.app.ActivityThread.access$1500(ActivityThread.java:121)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.os.Handler.dispatchMessage(Handler.java:99)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.os.Looper.loop(Looper.java:130)
12-14 12:23:43.719: E/AndroidRuntime(5179): at android.app.ActivityThread.main(ActivityThread.java:3701)
12-14 12:23:43.719: E/AndroidRuntime(5179): at java.lang.reflect.Method.invokeNative(Native Method)
12-14 12:23:43.719: E/AndroidRuntime(5179): at java.lang.reflect.Method.invoke(Method.java:507)
12-14 12:23:43.719: E/AndroidRuntime(5179): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
12-14 12:23:43.719: E/AndroidRuntime(5179): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
12-14 12:23:43.719: E/AndroidRuntime(5179): at dalvik.system.NativeStart.main(Native Method)
API:
这应该管用,不是吗
public final class SQLiteDatabase extends SQLiteClosable
>>
public abstract class SQLiteClosable extends Object implements Closeable
>>
public interface Closeable
不起作用:
- Xperia Play Android 2.3.4
- 摩托罗拉Xoom安卓4.0.4
- 三星Galaxy Nexus安卓4.2
android.database.sqlite.SQLiteClosable
仅从API级别16实现java.io.Closeable
。在此之前,它们是不相关的(即使两个接口从一开始就存在)
因此,如果希望代码向后兼容,就应该直接使用SQLiteClosable
可能还值得为您想要支持的最低版本安装SDK并尝试使用它构建,然后编译器会检测到这一点。
公共类DatabaseHelper扩展SQLiteOpenHelper implements Closeable
(不是安卓开发者)不兼容ClassChangeError听起来像是针对库的不同版本进行编译和运行。请参见此处接受的答案:@ignis和Anders:是的,但这些接口从API级别1开始就存在,我认为Android保证了二进制向上兼容性。奇怪…如果在Javadoc中也为SQLiteClosable注意到这一点,那就太好了。谢谢,好地方!遗憾的是,这是来自api16的更多安全检查代码。是的,Lint通常会捕获明显的API级别需求,但正如您所说,它们都可以从API 1获得。可能会制造一个皮棉警告并把它推上去。刚刚又被这个咬了!这次使用java.util.Scanner
为什么Lint API检查器没有捕捉到这一点?
public final class SQLiteDatabase extends SQLiteClosable
>>
public abstract class SQLiteClosable extends Object implements Closeable
>>
public interface Closeable