Java Android SQLite-NullPointerException在尝试访问单行时,是否可以访问整个数据?

Java Android SQLite-NullPointerException在尝试访问单行时,是否可以访问整个数据?,java,android,sqlite,nullpointerexception,logcat,Java,Android,Sqlite,Nullpointerexception,Logcat,基本上,我可以插入到我的数据库中,并使用下面的方法查看所有结果,一个SimpleCorsOrAdapter显示到ListView中,效果非常好 // Returns a Cursor containing all JSON strings public Cursor getAllJSONstrings() { // Return all JSONstrings ordered by COLUMN_ID return ssDatabase.query(TABLE_RO

基本上,我可以插入到我的数据库中,并使用下面的方法查看所有结果,一个SimpleCorsOrAdapter显示到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)是在一个异步任务中执行的。它引用的id是OnItemClickListeners onItemClick方法中的id

任何帮助都将不胜感激,我的头脑已经清醒了


干杯

考虑到唯一可能为null的引用是ssDatabase,因为刚刚分配了游标,id是一个普通的长id,并且假设您使用的是公共SqlliteHelper模式,我猜您可能忘记了在调用之前调用open()

getJSONstring


考虑到唯一可能为null的引用是ssDatabase,因为游标刚刚被分配,id是一个普通的长id,并且假设您使用的是公共SqlliteHelper模式,我猜您可能忘记了在调用之前调用open()

getJSONstring

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

这不是真的。您永远不应该假设您的查询返回了什么。如果selection子句未返回任何行,则cursor.getCount()将返回0。此外,查询可能引发SQLite异常。任何时候查看查询结果时,都应该将代码包含在

试一试{

}捕获(例外e){

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

这不是真的。您永远不应该假设您的查询返回了什么。如果selection子句未返回任何行,则cursor.getCount()将返回0。此外,查询可能引发SQLite异常。任何时候查看查询结果时,都应该将代码包含在

试一试{

}捕获(例外e){


}

如果异常发生在那里,您可能需要检查
ssDatabase
是否为
null
。您可以添加logcat/告诉我们哪一行给出了NPE吗?我可能有点不对劲,但您不应该做一些
moveToFirst()
或光标上的某些内容?如果出现异常,您可能需要检查
ssDatabase
是否为
null
。您是否可以添加日志/告诉我们哪一行给出了NPE?我可能有点不对劲,但您不应该在光标上执行某种
moveToFirst()
或其他操作吗?干杯,结果我确实忘记了:P然后我不得不改变我的光标,谢谢你的输入!干杯,结果我确实忘记了:P然后我不得不改变我的光标,谢谢你的输入!
// query
if ((cursor != null) && (cursor.getCount() > 0)) {

    // some operation

}
...