请帮我弄清楚为什么这些代码行不起作用。 我想用从数据库中提取的String元素填充列表。
这是返回列表的方法fillTheList():
public List<String> fillTheList() {
List<String> list = new ArrayList<String>();
//My database is called "ITEMS_" and the first column is called "typeOfItem"
String[] column = {"typeOfItem"};
String selection = "SELECT DISTINCT type FROM ITEMS_";
Cursor cursor = MainActivity.sqLiteHelper.getDataCategories("ITEMS_", column, selection);
if(cursor != null) {
list.clear();
if (cursor.moveToFirst()) {
do {
String type = cursor.getString(1);
list.add(type);
} while (cursor.moveToNext());
}
}
Log.d("List", cursor.getString(1));
return list;
}
getDataCategories()是sqLiteHelper类的方法
public Cursor getDataCategories(String table, String[] columns, String selection )
{
SQLiteDatabase database = getReadableDatabase();
Cursor cursor = database.query(true, table, new String[] {String.valueOf(columns)}, selection,
null, null, null, null, null);
return cursor;
}
错误发生在: 游标游标= MainActivity.sqLiteHelper.getDataCategories(“ ITEMS_”,列,选择);而logcat是: “由于:java.lang.NullPointerException:尝试在空对象上调用虚拟方法'android.database.Cursor SQLiteHelper.getDataCategories(java.lang.String,java.lang.String [],java.lang.String)'参考”
答案 0 :(得分:0)
错误日志指示MainActivity.sqLiteHelper
是null
。
我不知道您在fillTheList()
的哪个班级,但是您遇到了以错误的方式填写列表的问题。
像这样更改fillTheList()
:
public List<String> fillTheList() {
List<String> list = new ArrayList<>();
Cursor cursor = sqLiteHelper.getDataCategories();
if(cursor != null) {
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(0));
} while (cursor.moveToNext());
}
}
return list;
}
如您所见,您必须提供一个上下文以初始化SQLiteHelper,以获取游标并填充列表。
然后将getDataCategories()
更改为此:
public Cursor getDataCategories() {
SQLiteDatabase database = getReadableDatabase();
return database.rawQuery("SELECT DISTINCT typeOfItem FROM ITEMS_", null);
}
此方法使用更简单的rawQuery()
而不是query()
。
我不知道该列的名称是typeOfItem
还是type
,因此是否需要更改sql语句。
现在,如果首先有一个有效的fillTheList()
对象,例如SQLiteOpenHelper
,则可以使用sqlObject
,例如:
List<String> list = sqlObject.fillList();