gpt4 book ai didi

android - 尝试执行 SQLite 更新时 native 崩溃

转载 作者:行者123 更新时间:2023-12-02 09:51:47 26 4
gpt4 key购买 nike

我正在尝试增加 SQLite 表的所有行中整数列的值。假设表名称为 items,列名称为 value。代码如下所示:

SQLiteDatabase db = getDatabase();
db.execSQL("update items set value = (value + 1)");

代码正在单元测试中运行,整个测试套件完全停止并显示以下消息:

Test failed to run to completion. Reason: 'Instrumentation run failed due to 'Native crash''. Check device logcat for details

Here is the entire crash dump from logcat.

我已经在 SQLite shell 中验证了上面的更新语句确实按照编写的方式工作,并且会增加列的值。我也尝试过这些变体,每次都会导致相同的崩溃:

// variation 1
String sql = "update items set value = ?";
String[] sqlArgs = new String[]{ "(value + 1)" };
db.execSQL(sql, sqlArgs); // crashes

// variation 2
SQLiteStatement statement = db.compileStatement();
statement.execute(); // crashes

// variation 3
// Near as I can tell, below is what execSql does under the hood
SQLiteStatement statement = db.compileStatement();
statement.executeUpdateDelete(); // crashes

有人遇到过类似的事情吗?如何执行像上面这样的更新语句而不崩溃?

编辑

此崩溃似乎仅发生在 Android JUnit 测试中。在实际运行的应用程序中,带有上述更新语句的 execSQL() 调用会成功执行。我仍然想知道是什么原因导致它,但至少生产代码似乎不受它的影响......

最佳答案

我的应用程序也遇到了同样的问题。在我的应用程序中,我们有大约 30-40 个包,我们一起测试了每个类。测试用例在随机给出以下错误之间失败:

测试未能运行完成。原因:“由于‘ native 崩溃’,仪器运行失败”。检查设备 logcat 了解详细信息

为您创建的所有测试类一起执行测试用例时出现内存问题。因此,只需重写每个测试类中的 onTearDown() 方法,并通过清空该测试类中使用的对象来释放内存。

例如:

protected void TeaDown() 抛出异常 {
super.tearDown();
mActivity = null;
mInstance = null;
}

其中mActivitymInstance是所有测试方法使用的Instance变量。

这个重写tearDown()和释放对象解决了我的问题。

关于android - 尝试执行 SQLite 更新时 native 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22755392/

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