Codenameone 代码名1和SQLite错误

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实例之前,我已经通过我的代码尝试查看

我已经使用CN1编写了一个访问sqlite数据库的应用程序。当我使用Netbeans在模拟器中运行应用程序时,它工作得非常好。然而,当我试图连接到实际设备上的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。。。。现在这些路径不会出现在我的手机上——这可能是原因吗——或者我已经走远了?