java - 应用程序在第一次运行时加载数据库崩溃
问题描述
在我的应用程序中,我使用服务从 JSON 获取数据,然后将其保存在数据库中。
当我在新设备上运行该应用程序时,它会崩溃而没有任何错误!
但是当我注释掉用于加载到 TextViews 的代码时,它运行得很好。之后,即使我带回代码来提供 TextViews,它也能正常工作。
更新: 在我注释掉用于提供 TextViews 的代码之前,用于提供数据库的服务不会运行。
提供 TextViews 的代码:
//this service contains JSON to DB code
Intent intent = new Intent(MainActivity.this, GetdataService.class);
startService(intent);
cursor = DBOps.Ops.getTheOne();
cursor.moveToNext();
//app crashes at this line
wordText.setText(cursor.getString(cursor.getColumnIndex(DBContracts.Word.TITLE)));
phonetic = cursor.getString(cursor.getColumnIndex(DBContracts.Word.PHONETIC));
meaningText.setText(cursor.getString(cursor.getColumnIndex(DBContracts.Word.MEANING)));
exampleText.setText(cursor.getString(cursor.getColumnIndex(DBContracts.Word.EXAMPLE)));
物品获取方法:
public static Cursor getTheOne(){
return db.query(DBContracts.Word.TABLE_NAME,
null,
null,
null,
null,
null,
DBContracts.Word._ID + " DESC LIMIT 1"
);
}
解决方案
请考虑在遇到崩溃时检查堆栈跟踪。
但是根据您的描述:第一次运行时崩溃,以后运行时有效-这表明第一次运行时没有数据,但在以后的运行中查询返回一些数据。
cursor.moveToNext()
如果移动成功,即有一些数据,则返回一个布尔值。您应该始终检查游标moveTo...()
返回值。崩溃本身是因为Cursor#getString()
无效的行。
推荐阅读
- mysql - 时间戳上的Mysql减法运算符
- c++ - 静态 std::unique_ptr 在 .cpp 中声明,但也在各自的 .h 文件中调用和使用
- pandas - 在 Pandas 中选择包含数字子字符串的行
- qt-designer - 如何使用 pyside6-uic 将 .ui 文件编译为 python,但激活了 snake_case 和 true_property
- typescript - 尝试运行迁移时出现语法错误 typeorm
- networking - 用户看不到服务器
- python - 如何删除 Python 中的方括号?
- f# - F# 插值
- php - 追加多个数组
- docker - 更改端口 53 WSL2