首页 > 解决方案 > 应用程序在第一次运行时加载数据库崩溃

问题描述

在我的应用程序中,我使用服务从 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"
    );
}

标签: javaandroidjsondatabasesqlite

解决方案


请考虑在遇到崩溃时检查堆栈跟踪。

但是根据您的描述:第一次运行时崩溃,以后运行时有效-这表明第一次运行时没有数据,但在以后的运行中查询返回一些数据。

cursor.moveToNext()如果移动成功,即有一些数据,则返回一个布尔值。您应该始终检查游标moveTo...()返回值。崩溃本身是因为Cursor#getString()无效的行。


推荐阅读