我正在尝试显示我的sqlite数据库中的数据。在我的 DatabaseHandler.java 中,我有这个方法:
public List<Item> getAllItemsinList() {
List<Item> itemList = new ArrayList<Item>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_ITEMS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Item item = new Item();
item.set_id(Integer.parseInt(cursor.getString(0)));
item.set_name(cursor.getString(1));
item.set_description(cursor.getString(2));
// Adding contact to list
itemList.add(item);
} while (cursor.moveToNext());
}
// return item list
return itemList;
}
它返回一个类型为Item
的列表。
在我的 MainActivity.java 中,我有这个方法:
private void populateListViewUsingList(){
List<Item> items;
items = db.getAllItemsinList();
listView = (ListView) findViewById(R.id.listItems);
ArrayAdapter<Item> itemArrayAdapter = new ArrayAdapter<Item>(this,android.R.layout.simple_list_item_1, items);
listView.setAdapter(itemArrayAdapter);
}
列表视图已填充,但是,正在显示对象而不是数据库包含的数据。显示的文本示例为 migueld.rivera.catalogapp.Item@42a97320 。解析数据的正确方法是什么?感谢。
答案 0 :(得分:2)
正在显示的文字示例是 migueld.rivera.catalogapp.Item@42a97320。什么是正确的方法 解析数据?
ArrayAdapter获取对象列表,并从List.get
方法返回项目时调用toString方法。请参阅此处getView实施:
T item = getItem(position);
if (item instanceof CharSequence) {
text.setText((CharSequence)item);
} else {
text.setText(item.toString());
}
所以,
选项1:覆盖Item
类中的toString方法,该方法返回Item对象的可读字符串表示
@Override
public String toString() {
return String.format(name + "---" + description);
}
选项2:通过扩展ArrayAdapter创建自定义适配器:
答案 1 :(得分:1)
这种情况正在发生,因为您正在直接显示该对象。在适配器的getview方法中尝试这种方式
Items item = getItem(position);
textView.setText(item.get_name()+....+item.get_description);
使用您在班级中声明的适当方法名称
此处显示的自定义列表视图适配器示例 ListView with custom adapter