Codename One和SQLite错误

时间:2017-10-25 12:03:22

标签: codenameone

我使用CN1编写了一个访问sqlite db的应用程序。当我使用Netbeans在模拟器中运行应用程序时,它运行得很好。但是,当我尝试连接到实际设备上的数据库时,我收到此错误...

java,lang,NullPointerException: Attempt to invoke virtual method 'void.com.codename1.db.Database.close()' on a null object reference

我已经通过我的代码尝试看看我是否正在关闭'在我创建数据库实例之前,我无法看到它 - 如果我这样做,那么我会期望它在模拟器中失败吗?

感谢任何帮助

由于

2 个答案:

答案 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]在尝试关闭数据库之前,是否需要检查数据库是否已打开?