Java Android SQLite-NullPointerException在尝试访问单行时,是否可以访问整个数据?
基本上,我可以插入到我的数据库中,并使用下面的方法查看所有结果,一个SimpleCorsOrAdapter显示到ListView中,效果非常好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
// 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
}
...