对于循环运行两次但其中的ArrayAdapter仅获得第二个结果

时间:2016-07-24 12:09:37

标签: android arrays for-loop amazon-dynamodb

我在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 = 0i = 1时,由于某种原因,它仅在i = 1时运行,因此它仅显示第二项,而不是第一项。

我考虑过它,我认为它与onPostExecute方法代码有关。在代码中,alp作为适配器。也许它与它有关?

你能帮帮我吗?我坚持这个问题超过3天,我必须在本周末结束这个项目。

如何设置alp一次包含字符串数组中的多个项目?

2 个答案:

答案 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++)