gpt4 book ai didi

android - Sugar ORM 不会创建表

转载 作者:IT王子 更新时间:2023-10-28 23:36:09 29 4
gpt4 key购买 nike

我正在开发一个需要持久化简单模型的独立库项目。这是我的 SugarRecord 的样子:

/**
* Keeping track of previously received messages by ID
*/

public class MessageRequestIdModel extends SugarRecord {

protected String messageRequestId;

public MessageRequestIdModel() {

}

public MessageRequestIdModel(String messageRequestId) {
this.messageRequestId = messageRequestId;
}

public String getMessageRequestId() {
return this.messageRequestId;
}

public static boolean exists(String id) {
return MessageRequestIdModel.find(
MessageRequestIdModel.class,
"messageRequestId = ?",
id
).size() != 0;
}
}

在存储库类中,我试图通过调用此方法来持久化它:

@Override
public void save(MessageRequestId messageRequestId) {
new MessageRequestIdModel(messageRequestId.getId()).save();
}

我现在尝试使用 android.test.InstrumentationTestCase 进行测试,其中我将 Context 传递给 Sugar,如下所示:

SugarContext.init(getInstrumentation().getContext());

当我运行测试时,这会导致此错误:(截断这个问题以保持简洁)

android.database.sqlite.SQLiteException: no such table: MESSAGE_REQUEST_ID_MODEL (code 1): , while compiling: INSERT or REPLACE...

我已经尝试过的故障排除:

  • 为测试包保留不同的 Manifest 以将 .test 包名称传递给 SugarORM。行为没有改变
  • 添加 MessageRequestIdModel.findById(MessageRequestIdModel.class, (long) 1); 就像在其他 SO 帖子中一样。将错误更改为自身(在此处显示完整的堆栈跟踪以防万一):

    android.database.sqlite.SQLiteException: no such table: MESSAGE_REQUEST_ID_MODEL (code 1): , while compiling: SELECT * FROM MESSAGE_REQUEST_ID_MODEL WHERE id=? LIMIT 1

    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    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:192)
    at com.orm.SugarRecord.findById(SugarRecord.java:102)
    at pm.tin.apprise.entities.message_request_ids.MessageRequestIdModelRepository.save(MessageRequestIdModelRepository.java:19)
  • 我已尝试按照许多人的建议从 list 中删除所有 Sugar ORM 配置 - 这没有任何改变

  • 我已经尝试创建一个示例应用程序模块并尝试将其作为该应用程序的测试用例运行,以防独立应用程序没有在模拟器/设备上获得正确的资源(我已经在两者)

  • 我已尝试增加数据库的 VERSION 编号

  • 我尝试切换到 ActivityTestCase 并使用 getActivity().getApplicationContext()。这基本上失败,并出现一个错误,表明此上下文不完整,无法设置 SQLite

如您所见,我整晚都在努力插入这 block 巨石,但在这一点上,它似乎是西西弗斯,除了使用与 Sugar 不同的 ORM(它不会'似乎不是问题)。没有什么比不能在测试用例中运行 SQLite 更令人沮丧的了,我向你神圣的程序员意识寻求帮助:-'(

最佳答案

此问题已在 Android Studio 2.x.x-beta 版本(尤其是 2.0.0-beta6)中观察到,其根本原因在于“即时运行”功能。

我想这可能很快就会得到解决,但为了在此期间正常工作,您应该在以下菜单中禁用该功能

文件 |设置 |构建、执行、部署 |即时运行

清理然后构建应用程序应该可以解决这些问题。

您可以查看相关的 Sugar 错误报告 here .

关于android - Sugar ORM 不会创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35765760/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com