代码
MainData myDBHlpr = new MainData(getActivity()); // Instantiate a MainDatabasehelper object called myDBHlpr
Cursor csr = myDBHlpr.getAllQuestions(getActivity());
mMostMessagesSent.setText(csr.getString(csr.getColumnIndex("MostMessagesSent")));
Log.d("ZZZ", csr.getString(csr.getColumnIndex("MostMessagesSent")));
csr.close();
仅用于获取SQLite数据的代码,但该行出现了超出范围的异常。 mMostMessagesSent.setText(csr.getString(csr.getColumnIndex("MostMessagesSent")));
空指针
数据库助手
public Cursor getAllQuestions(FragmentActivity usageSettings) {
return this.getWritableDatabase().query(TABLE_NAME,null,null,null,null,null,null);
}
答案 0 :(得分:0)
您没有移动到游标中的实际行。因此,当您尝试获取数据时,您位于第一行之前,因此位于 无法使用 的偏移量为 -1 strong>。
当SQLiteDatabase方法返回游标时,游标将位于第一行之前的位置。这个位置是-1。
csr.moveToPosition(-1)
将光标设置为第一行之前。假设您要遍历所有行,则以下内容将依次轮流移至每一行,直到没有更多行为止(如果可以进行此移动,通常Cursor moveTo ????方法将返回 true 否则返回 false )(这就是while循环适用于所有行的原因。)
Cursor csr = myDBHlpr.getAllQuestions(getActivity());
while (csr.moveToNext()) {
mMostMessagesSent.setText(csr.getString(csr.getColumnIndex("MostMessagesSent")));
}
csr.close();
但是,那将仅在TextView中显示最后一行。如果这是一个问题,并且您无法解决该问题,则应该问另一个问题。
mMostMessagesSent.setText("No Data Extracted")
,因此TextView将指示如果未提取任何数据,则不会提取任何数据。