【发布时间】:2016-05-08 17:58:35
【问题描述】:
在模拟器上的 Android Studio 中运行 android 应用程序时,我遇到了一个非常奇怪的错误。错误粘贴在下面。
我没有将 SQLite 用于数据库。我正在使用共享表演。代码中没有对 USER_DATA_TABLE 或 SQLite 的引用。
我可以看到对 USER_DATA_TABLE 和 SQLite 的引用的唯一地方是 /build/generated/mockable-android-23.jar 文件,该文件显然是由构建过程生成的。在构建应用程序并运行之前,我删除了整个构建文件夹。
哪位专家能给我一些解决方法的线索吗?
访问SugarORM的代码sn-p是这样的:
public void redrawNavMenu() {
UserDataTable user = UserDataTable.findById(UserDataTable.class, 1L);
使用的 findById 方法在 SugarORM 中
public static <T extends SugarRecord<?>> T findById(Class<T> type, Long id) {
List<T> list = find( type, "id=?", new String[]{String.valueOf(id)}, null, null, "1");
if (list.isEmpty()) return null;
return list.get(0);
}
我迷路了。那么如果 USER_DATA_TABLE 根本不在代码中,那么从哪里访问它呢?
日志:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matt.quiz/com.matt.quiz.activities.QuizActivity}: android.database.sqlite.SQLiteException: no such table: USER_DATA_TABLE (code 1): , while compiling: SELECT * FROM USER_DATA_TABLE WHERE id=? LIMIT 1
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.database.sqlite.SQLiteException: no such table: USER_DATA_TABLE (code 1): , while compiling: SELECT * FROM USER_DATA_TABLE WHERE id=? LIMIT 1
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1240)
at com.orm.SugarRecord.find(SugarRecord.java:208)
at com.orm.SugarRecord.findById(SugarRecord.java:138)
at com.matt.quiz.activities.QuizActivity.redrawNavMenu(QuizActivity.java:461)
at com.matt.quiz.activities.QuizActivity.onCreate(QuizActivity.java:194)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
【问题讨论】:
-
在 SQLite 错误之前,我看到购买设置错误 05-08 18:36:03.032 2573-2573/com.matt.quiz E/Purchase setup: 出了点问题 - 如何解决这个问题?
-
“我没有在数据库中使用 SQLite”——是的,你是,通过 SugarORM,你可以从堆栈跟踪中看出这一点。请提供minimal reproducible example,在这种情况下将包含
QuizActivity的源代码。 -
Tx 快速回复,是的,你是对的,这里提到了 SugarORM,但同样是在构建文件中,而不是在我的代码中。我已经更新了问题以显示代码 sn-p 调用它的位置,如您在日志中看到的那样。如果您需要更多代码 sn-ps,请告诉我。
-
“但同样是在构建文件中,而不是我的代码”——你的代码有
UserDataTable user = UserDataTable.findById(UserDataTable.class, 1L);。根据您的堆栈跟踪,UserDataTable似乎扩展了SugarRecord,这当然适合the Sugar ORM documentation。我不知道为什么它没有按照文档建议的方式为您创建表格,因为我从未使用过 Sugar ORM。 -
我建议您阅读the documentation,因为您似乎对自己在做什么感到困惑。 Sugar ORM 是“简化与 SQLite 数据库的交互”。如果您不想使用 SQLite,请停止使用 Sugar ORM。
标签: java android sqlite android-studio