我在for
方法代码的AsyncTask
中有doInBackground
循环:
Object[] strings = prefItems.getStringSet("items", null).toArray();
for (int i = 0; i < strings.length; i++) {
DynamoDBScanExpression scan = new DynamoDBScanExpression();
Condition condition = new Condition()
.withComparisonOperator(ComparisonOperator.EQ)
.withAttributeValueList(new AttributeValue().withS(strings[i].toString()));
scan.addFilterCondition("id", condition);
List<Item> addedItems = dbMapper.scan(Item.class, scan);
ArrayList<Item> alp = new ArrayList<Item>();
for (Item item: addedItems) {
item.setName(item.getName());
item.setId(item.getId());
alp.add(item);
}
}
在onPostExecute
方法中,我有这段代码:
ListView lv = (ListView) findViewById(R.id.listView);
ListViewAdapter adapt = new ListViewAdapter(MainActivity.this, alp);
lv.setAdapter(adapt);
strings
中有2个字符串。
代码假设从Object[]
获取每个字符串,并在DynamoDB表中搜索相同的项。由于某种原因,它仅显示数组中第二项的结果。
我试图将这些项目显示为文本,所以当我写“数组中的第二项”时,我的意思是字母顺序,因为它表示为字符串。
根据strings
的长度,代码假设只运行2次。在i = 0
和i = 1
时,由于某种原因,它仅在i = 1
时运行,因此它仅显示第二项,而不是第一项。
我考虑过它,我认为它与onPostExecute
方法代码有关。在代码中,alp
作为适配器。也许它与它有关?
如何设置alp
一次包含字符串数组中的多个项目?
答案 0 :(得分:0)
我通过移动这条线来解决它:
ArrayList<Item> alp = new ArrayList<Item>();
使用onCreate
方法,以便它不会自行循环,并删除ArrayList
内容。
答案 1 :(得分:-2)
尝试更改此行
for (int i = 0; i < strings.length; i++)
为:
for (int i = 0; i <= strings.length; i++)