gpt4 book ai didi

Android:setListAdapter 仅设置数据库中的最后一行

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:27 25 4
gpt4 key购买 nike

正如标题所述,我在将我的数据从数据库链接到 ListView 时遇到了一些问题,问题在于适配器将仅设置返回的最后一行,而不是数据库表中的每一行。

我正在努力实现的一个例子:

餐 table 动物:猴猫狗老虎

将在屏幕上仅显示为 Tiger。

我的方法从数据库返回游标:

public Cursor retrieveAnimals(){

return = DB.query(ANIMAL_TABLE, new String[] {
KEY_ROWID,
KEY_ANIMALNAME,
},
null,
null,
null,
null,
null);
}

并设置 ListView

    dbm = new MyDBManager(this);
dbm.open();
dbm.deleteAnimals();
dbm.populateDB();

// after populating, set the adapter..
myCursor = dbm.getAllAnimals();

String[] columns = new String[] {"animal_name"};
int[] to = new int[] {R.id.animal};

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.row, myCursor, columns, to);
this.setListAdapter(mAdapter);

我觉得我的问题出在光标位置上,因为在设置适配器时它会自动移动到最后一行,我一直在努力寻找解决问题的办法,但没有成功。

提前感谢您的任何建议。

编辑:填充数据库的方法

public long populateDB(){


ContentValues initialValues = new ContentValues();

for(int i = 0; i < animalName.length; i++){
initialValues.put(KEY_ANIMALNAME, animalName[i]);
}

return DB.insert(ANIMAL_TABLE, null, initialValues);

}

最佳答案

在您的 retrieveAnimals() 中,该行应该是 return DB.query(...)(注意缺少 =returnDB.query 之间。

除此之外,您的代码看起来还不错。您应该在光标上调用 startManagingCursor(在调用 getAllAnimals 之后)以避免内存泄漏。

编辑:将填充方法更改为:

public long[] populateDB(){


ContentValues initialValues = new ContentValues();
long[] rowIds = new long[animalName.length];

for(int i = 0; i < animalName.length; i++){
// here we are using a single ContentValues object and inserting it
// into the DB before changing the ContentValues and inserting it again
initialValues.put(KEY_ANIMALNAME, animalName[i]);
rowIds[i] = DB.insert(ANIMAL_TABLE, null, initialValues);
}

return rowIds;

}

或者(更多内存使用,但如果您需要在插入之前修改某些记录,则可能有用):

public void populateDB(){

ContentValues[] initialValues = new ContentValues[animalName.length];

for(int i = 0; i < animalName.length; i++){
// create a new ContentValues for each object
initialValues[i] = new ContentValues();
initialValues[i].put(KEY_ANIMALNAME, animalName[i]);
}

// now our contentvalues is filled we can insert them all
for(int i = 0; i < animalName.length; i++){
DB.insert(ANIMAL_TABLE, null, initialValues[i]);
}
}

关于Android:setListAdapter 仅设置数据库中的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5552754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com