Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLiteDatabase';不实现接口';_Java_Android_Android Sqlite_Implements - Fatal编程技术网

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