Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用列表填充ListView_Java_Android_Sqlite_Listview_Arraylist - Fatal编程技术网

Java 使用列表填充ListView

Java 使用列表填充ListView,java,android,sqlite,listview,arraylist,Java,Android,Sqlite,Listview,Arraylist,我正在尝试显示来自sqlite数据库的数据。在我的DatabaseHandler.java中,我有以下方法: public List<Item> getAllItemsinList() { List<Item> itemList = new ArrayList<Item>(); // Select All Query String selectQuery = "SELECT * FROM " + TABLE_ITEMS; S

我正在尝试显示来自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;
}
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);
}
listview已填充,但显示的是对象,而不是数据库包含的数据。显示的文本示例为migueld.rivera.catalogapp。Item@42a97320。解析数据的正确方法是什么?谢谢

显示的文本示例如下所示 migueld.rivera.catalogapp。Item@42a97320. 正确的方法是什么 解析数据

ArrayAdapter获取对象列表,并在从
列表返回项时调用字符串方法。get
方法。请参见以下内容:

 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创建自定义适配器:


发生这种情况是因为您直接显示对象。在适配器的getview方法中尝试这种方式

Items item = getItem(position);

textView.setText(item.get_name()+....+item.get_description);
使用您在类中声明的适当方法名

此处显示了中的自定义listview适配器示例

请参见问题您可能希望覆盖Item的toString()方法以使其正确显示My
Item
类当前不是toString方法。你是说我应该做一个吗?是的,它目前正在使用默认的实现。我们将研究这些。到目前为止,选项2是我所需要的。谢谢。@MiguelRivera:是的,因为在重写getView方法后,您可以调用Item类中的所有getter方法来获取值,并在不同的文本视图“sHi@ρƏσѕρєK”中显示,该示例显示数组中的数据。是否建议将我的
列表
转换为数组或修改适配器类以接受
列表
?@MiguelRivera:无需将列表转换为数组,只需将列表对象传递给自定义适配器类,并在自定义适配器类中使用列表对象而不是数组即可。我从事过跨平台开发,对本机编码已经生疏了。这篇教程帮了大忙。谢谢她还没有适配器。这可能需要扩展以包括您需要创建自定义适配器的事实