1

基本上,我可以插入我的数据库并使用以下方法查看所有结果,并将 SimpleCursorAdapter 显示到 ListView - 工作得很好。

// Returns a Cursor containing all JSON strings
public Cursor getAllJSONstrings()
{       
    // Return all JSONstrings ordered by COLUMN_ID
    return ssDatabase.query(TABLE_ROUTINES, new String[] {COLUMN_ROWID, COLUMN_JSON}, null, null, null, null, COLUMN_ROWID);        
}

但是,以下方法提供的信息不亚于NullPointerException我每次查询。

id LogCat 标签将标签显示为应有的标签,1 表示第一项等。

// Return one JSONstring in String form 
public String getJSONstring(long id)
{
    Log.i(TAG, "getJSONstringStart... id=" + id);

    Cursor cursor;

    Log.i(TAG, "Cursor defined");

    /****** NullPointerException LINE ******/
    cursor = ssDatabase.query(TABLE_ROUTINES, null, "_id=" + id, null, null, null, null);

    Log.i(TAG, "Exceed Cursor");

    int index = cursor.getColumnIndex(COLUMN_JSON);

    Log.i(TAG, "index=" + index);

    return cursor.getString(index);
}

值得一提的是,此方法 getJSONString(long id) 正在 AsyncTask 中执行。它引用的 id 是 OnItemClickListeners onItemClick 方法中的 id。

任何帮助将不胜感激,我的头已经方了!

干杯!

4

2 回答 2

4

你必须做 moveToFirst()。您的方法假设游标的当前行指针已设置为第一行,并且 getString(index) 将返回第一行的 COLUMN_JSON 值。

这不是真的。你永远不应该假设你的查询返回了一些东西。如果选择子句没有返回任何行,则 cursor.getCount() 将返回 0。此外,查询可能会抛出 SQLite 异常。任何时候查看查询结果时,都应该将代码附在

尝试 {

// query
if ((cursor != null) && (cursor.getCount() > 0)) {

    // some operation

}
...

} 捕捉(异常 e){

}

于 2012-12-19T21:40:54.907 回答
1

鉴于唯一可能的 null 引用是 ssDatabase,因为光标刚刚被分配并且 id 是一个普通的 long,并且假设您使用的是常见的 SqlliteHelper 模式,我的猜测是您之前可能忘记调用 open()打电话

获取JSON字符串

于 2012-12-19T21:36:45.053 回答