Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.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
从sqlite数据库中检索多个值,并将其填充到android的listview中_Android_Database_Sqlite - Fatal编程技术网

从sqlite数据库中检索多个值,并将其填充到android的listview中

从sqlite数据库中检索多个值,并将其填充到android的listview中,android,database,sqlite,Android,Database,Sqlite,有一位大师 我在寻求帮助。我在互联网上做了很多研究,但都没有结果。我想将获取的所有值添加到listview。我已经设法将值插入数据库并设法获取所有值,但是,我无法将它们添加到listview。 下面的函数工作正常,并以列表形式返回数据 public List<Contact> getAllContacts() { List<Contact> contactList = new ArrayList<Contact>(); //

有一位大师

我在寻求帮助。我在互联网上做了很多研究,但都没有结果。我想将获取的所有值添加到listview。我已经设法将值插入数据库并设法获取所有值,但是,我无法将它们添加到listview。 下面的函数工作正常,并以列表形式返回数据

 public List<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                Contact contact = new Contact();
                contact.setID(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setPhoneNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

不要为每个新项目设置适配器,而是只将联系人列表传递给列表视图适配器一次。如果要添加新项,请添加“添加到现有适配器”

你可以这样做

private void showRecords() {
   List<Contact> contacts = db.getAllContacts();
   lv.setAdapter(new dataAdapter(this, contacts));       
}
public void add(Contact contact) {
    if(mContact != null) {
        mContact.add(contact);
        // This will refresh the list.
        notifyDataSetChanged();
    }
}
您的getView()方法应该是

public int getCount() {
    return mContact.size();
}
public  View getView(final  int position, View convertView, ViewGroup parent) {
    Contact contact = mContact.get(position);
    ....
    ....
    holder.nameV.setText(contact.getName());
    holder.phoneV.setText(contact.getPhone());
    ....
    ....
    return view;
}
如果您添加到这个现有的适配器中,请添加如下自定义方法

private void showRecords() {
   List<Contact> contacts = db.getAllContacts();
   lv.setAdapter(new dataAdapter(this, contacts));       
}
public void add(Contact contact) {
    if(mContact != null) {
        mContact.add(contact);
        // This will refresh the list.
        notifyDataSetChanged();
    }
}

我仍然建议您阅读上面链接中提到的教程,您的适配器类需要进行大量更改才能更好地实现。

按照此教程进行自定义适配器您的
showRecords
方法错误。您不会循环浏览记录并为每个记录设置适配器。您应该创建一个适配器的实例,该实例由您的
列表支持,然后将其设置为once请David,您能为我这样做吗?因为我完全搞不懂jhamas,感谢您提供的链接,但是我想将列表中的数据填充到listview。listview工作得很好,最大的问题是如何将数据添加到listview仍然不工作,setAdapter()类有四个参数make Contact对象中的三个参数,因此您可以修改适配器以获取联系人列表。像
DataAdapter(上下文,列表联系人)
我看到你有一个线索,我可以发布整个listAdapter吗?我已经发布了整个DataAdapter类。请参阅editsit已起作用,但它返回了一个包含数据info.example.androidsqlitedb的列表。Contacts@32c445a7
public  View getView(final  int position, View convertView, ViewGroup parent) {
    Contact contact = mContact.get(position);
    ....
    ....
    holder.nameV.setText(contact.getName());
    holder.phoneV.setText(contact.getPhone());
    ....
    ....
    return view;
}
public void add(Contact contact) {
    if(mContact != null) {
        mContact.add(contact);
        // This will refresh the list.
        notifyDataSetChanged();
    }
}