Android 如何将数据从数据库获取到对象列表中并在listview中显示?
我正在尝试制作一个简单的联系人应用程序,但在将数据从数据库检索到对象列表时遇到了一个问题。我试着在没有物体的情况下做这件事,然后我注意到这种方法在实践中更常用。我想在这个应用程序中做的是在列表视图中显示联系人的姓名 这是我的代码:Android 如何将数据从数据库获取到对象列表中并在listview中显示?,android,Android,我正在尝试制作一个简单的联系人应用程序,但在将数据从数据库检索到对象列表时遇到了一个问题。我试着在没有物体的情况下做这件事,然后我注意到这种方法在实践中更常用。我想在这个应用程序中做的是在列表视图中显示联系人的姓名 这是我的代码: public class Contact { //private variables int _id; String _name; String _phone_number; // Empty constructor public Contact(){ } p
public class Contact {
//private variables
int _id;
String _name;
String _phone_number;
// Empty constructor
public Contact(){
}
public Contact(String name){
this._name=name;
}
// constructor
public Contact(int id, String name, String _phone_number){
this._id = id;
this._name = name;
this._phone_number = _phone_number;
}
// constructor
public Contact(String name, String _phone_number){
this._name = name;
this._phone_number = _phone_number;
}
// getting ID
public int getID(){
return this._id;
}
// setting id
public void setID(int id){
this._id = id;
}
// getting name
public String getName(){
return this._name;
}
// setting name
public void setName(String name){
this._name = name;
}
// getting phone number
public String getPhoneNumber(){
return this._phone_number;
}
// setting phone number
public void setPhoneNumber(String phone_number){
this._phone_number = phone_number;
}
@Override
public String toString() {
return _name;
}
}
方法来检索所有数据:
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;
}
公共列表getAllContacts(){
List contactList=new ArrayList();
//选择所有查询
String selectQuery=“SELECT*FROM”+表格\联系人;
SQLiteDatabase db=this.getWritableDatabase();
Cursor Cursor=db.rawQuery(selectQuery,null);
//循环遍历所有行并添加到列表
if(cursor.moveToFirst()){
做{
触点=新触点();
setID(Integer.parseInt(cursor.getString(0));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
//将联系人添加到列表中
联系人列表。添加(联系人);
}while(cursor.moveToNext());
}
//返回联系人列表
返回联系人列表;
}
在my MainActivity中检索数据的方法(这里有问题,但无法解决):
public void printDatabase(){
List listOfContacts=handler.getAllContacts();
联系方式(cn:listOfContacts){
cn.getName();
新增(cn)合同清单;
}
}
两个问题:
1) 正如@RaviTeja所指出的,所有初始化都在onCreate()方法中进行,而不是在循环中进行。然后,调用notifydatasetchanged()
(二)
引用ArrayAdapter的官方文件:
无论文本视图是如何引用的,它都将填充
数组中每个对象的toString()。您可以添加
自定义对象。将对象的toString()方法重写为
确定将为列表中的项目显示哪些文本
所以,你知道该怎么做。在Contact
类中实现ToString()方法,如下所示:
public String toString()
{
return "name: "+_name;
}
您不必在循环中初始化listview和适配器
listView = (ListView) findViewById(R.id.listview); //global
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,listOfContacts);
listView.setAdapter(adapter);
将上述代码部分移出for循环。无需循环。将此代码放入
onCreate()
并全局声明适配器。然后调用adapter.notfiyDataSetChanged()
将联系人添加到列表中后。这将更新列表。您确定要获取联系人列表中的所有联系人吗?你面临的确切问题是什么?发布您的logcat.contact名称未显示在ListView中,因此我添加了toString方法,如更新的主题中所示。我还将listview部分移到了on create方法,并删除了for循环。那么我的printDatabase方法应该是什么样子呢?因为我经常使用它(在删除联系人、添加联系人等之后),根据您的用例,您的打印数据库应该只更新适配器中的列表,并调用“notifydatasetchanged()”方法。没问题。如果它解决了您的问题,您应该接受答案,以便此页面上的新用户知道该做什么:)
listView = (ListView) findViewById(R.id.listview); //global
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,listOfContacts);
listView.setAdapter(adapter);