我使用CN1编写了一个访问sqlite db的应用程序。当我使用Netbeans在模拟器中运行应用程序时,它运行得很好。但是,当我尝试连接到实际设备上的数据库时,我收到此错误...
java,lang,NullPointerException: Attempt to invoke virtual method 'void.com.codename1.db.Database.close()' on a null object reference
我已经通过我的代码尝试看看我是否正在关闭'在我创建数据库实例之前,我无法看到它 - 如果我这样做,那么我会期望它在模拟器中失败吗?
感谢任何帮助
由于
答案 0 :(得分:1)
在您的代码中,您可以:
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设备并查看DDMS您应该能够看到错误的完整堆栈跟踪,这将指向您失败的特定代码行。
请注意,对于crash protection,这也应该可以正常工作,而不需要使用DDMS或电缆。
答案 1 :(得分:0)
我设法在此YouTube教程之后使用“adb”命令找到问题的原因:https://www.youtube.com/watch?v=3wMlCucwGvE
当我按照这些说明操作时,我可以看到以下输出
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]在尝试关闭数据库之前,是否需要检查数据库是否已打开?