Codenameone 代码名1和SQLite错误
我已经使用CN1编写了一个访问sqlite数据库的应用程序。当我使用Netbeans在模拟器中运行应用程序时,它工作得非常好。然而,当我试图连接到实际设备上的db时,我得到了这个错误Codenameone 代码名1和SQLite错误,codenameone,Codenameone,我已经使用CN1编写了一个访问sqlite数据库的应用程序。当我使用Netbeans在模拟器中运行应用程序时,它工作得非常好。然而,当我试图连接到实际设备上的db时,我得到了这个错误 java,lang,NullPointerException: Attempt to invoke virtual method 'void.com.codename1.db.Database.close()' on a null object reference 在我创建DB实例之前,我已经通过我的代码尝试查看
java,lang,NullPointerException: Attempt to invoke virtual method 'void.com.codename1.db.Database.close()' on a null object reference
在我创建DB实例之前,我已经通过我的代码尝试查看我是否正在执行“关闭”操作,但我看不到它-如果我正在执行此操作,那么我希望它在模拟器中失败,对吗
谢谢你的帮助
感谢您在代码中执行以下操作:
dbPath = Display.getInstance().getDatabasePath("MyDB.db");
if(dbPath != null && !FileSystemStorage.getInstance().exists(dbPath)) {
copyDb(dbPath);
}
}
然后你会:
db = Display.getInstance().openOrCreate(dbPath);
这是一个错误,我有点惊讶这在模拟器中工作。您需要使用:
db = Display.getInstance().openOrCreate("MyDB.db");
原始答复如下:
如果您用电缆连接Android设备并查看DDM,您应该能够看到错误的完整堆栈跟踪,该跟踪将指向失败的特定代码行
请注意,在这种情况下,无需使用DDM或电缆,也可以正常工作。我在YouTube教程之后使用“adb”命令找到了问题的原因: 当我按照这些说明操作时,我可以看到以下输出
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: Failed to open database '/databases/MyDB.db'.
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1294): Could not open database
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: #################################################################
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: Error Code : 1294 (SQLITE_CANTOPEN_ENOENT)
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: Caused By : Specified directory or database file does not exist.
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: (unknown error (code 1294): Could not open database)
10-27 08:14:12.580 3967 3986 E SQLiteDatabase: #################################################################
因此,这个输出和我最初的错误消息一起告诉我,我试图在打开数据库之前关闭它
因此,这在我脑海中提出了两个问题:
1] 为什么它能在模拟器中完美工作
2] 在尝试关闭数据库之前,是否需要检查它是否打开?谢谢Shai。不幸的是,我无法使用Netbeans让DDMS为我工作。我确信这只是我的理解不足。您可以使用下面的编辑链接编辑您的原始问题,并将代码放在其中。有按钮。我已经查看了您的文档,并更改了我的答案以包含问题的解决方案。您使用哪种代码打开数据库?日志中的路径显然是错误的,我不确定这是如何工作的-因此这里有一个指向我的示例代码的链接…--即使它不正确,它也不会在模拟器中工作,对吗?所以我刚刚调试了我的代码,在某一点上我可以看到以下值:conn.url=jdbc:sqlite:/home/stevenmarkintegration/.cn1/database/MyDB.db和conn.filename=/home/stevenmarkintegration/.cn1/database/MyDB.db。。。。现在这些路径不会出现在我的手机上——这可能是原因吗——或者我已经走远了?