gpt4 book ai didi

java - 将特定项目从一个数组列表复制到另一个数组列表

转载 作者:行者123 更新时间:2023-12-01 05:43:44 26 4
gpt4 key购买 nike

我是 android 编程新手,我想问一个简单的问题

我已成功解析 RSS 提要并将特定元素(例如标题、发布日期、链接、媒体和描述)保存在数据库中。然后我使用数组列表从数据库中检索数据。其代码是

  public static  ArrayList<Item> GetItems(AndroidDB androiddb) {
SQLiteDatabase DB = androiddb.getReadableDatabase();
ArrayList<Item> result = new ArrayList<Item>();
try {
Cursor c = DB.rawQuery("select * from ITEMS_TABLE", null);
if (c.getCount() > 0) {
c.moveToFirst();
do {
result.add(new Item(
c.getString(0),
c.getString(1),
c.getString(2),
c.getString(3),
c.getString(4)));
} while (c.moveToNext());

}
c.close();
DB.close();
} catch (SQLException e){
Log.e("DATABASE", "Parsing Error", e);

}
return result;

}

其中 0 是包含标题元素的数据库的第一列

现在我只想创建一个仅包含标题元素的 ListView ,因此我在 onCreate 方法中创建了一个 ArrayList,我的问题是如何从之前的 ArrayList 中仅复制引用 Title 元素的项目。我已经写了这部分代码。我应该在循环中写什么来复制特定项目?

      ArrayList<String> first_item = new ArrayList<String>();
items=AndroidDB.GetItems(rssHandler.androiddb);
int numRows=items.size();
for(int i=0; i < numRows; ++i) {

first_item.add());
}

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, first_item));

ListView lv = getListView();
lv.setTextFilterEnabled(true);

lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
Toast.LENGTH_SHORT).show();
}
});
}

catch (Exception e) {
tv.setText("Error: " + e.getMessage());
Log.e(MY_DEBUG_TAG, "Parsing Error", e);
}
this.setContentView(tv);
}

提前致谢

最佳答案

一些简短的评论 - 首先,

if (c.getCount() > 0) {
c.moveToFirst();
do {
result.add(new Item(
c.getString(0),
c.getString(1),
c.getString(2),
c.getString(3),
c.getString(4)));
} while (c.moveToNext());
}

可以安全地替换为简单的:

while (c.moveToNext()) {
....
}

没有特别的理由以这种方式检查大小,并且您不需要在光标上调用 moveToFirst() 。这只是对可维护性的建议,并没有回答您的问题,但我想把它扔在那里以节省您将来的击键次数。

就你的问题而言 - 如果我理解正确,你想从对象的复合列表中获取元素列表 - 基本上,该列表由持有该属性的对象列表中特定属性的所有实例组成属性(property)。做到这一点没有捷径。幸运的是,您可以比其他代码更干净地完成此操作:

List<CompoundObjectWithAStringProperty> foo = /* go get the list */
List<String> allProperties = new ArrayList<String>();

for (CompoundObjectWithAStringProperty obj : foo) {
allProperties.add(obj.getStringProperty());
}

你的代码有 90% 是这样的,但是它非常像 C。

关于java - 将特定项目从一个数组列表复制到另一个数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462565/

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