2016-07-24 1 views
0

Ich habe diese for Schleife in einem AsyncTask in meinem Code in der doInBackground Methode erhalten:For-Schleife läuft zweimal aber ArrayAdapter darin nur das zweite Ergebnis

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); 
     } 
    } 

Auf der onPostExecute Methode, die ich habe diesen Code:

ListView lv = (ListView) findViewById(R.id.listView); 
ListViewAdapter adapt = new ListViewAdapter(MainActivity.this, alp); 
lv.setAdapter(adapt); 

Es gibt 2 Strings in strings.
Der Code soll jede Zeichenfolge aus der Object[] nehmen und nach einem gleichen Element in einer DynamoDB-Tabelle suchen. Aus irgendeinem Grund zeigt es Ergebnisse nur für das zweite Element im Array.
Ich habe versucht, die Elemente als einen Text zu zeigen, so als ich "das zweite Element im Array" schrieb, meinte ich in einer alphabetischen Reihenfolge, seit dem, wie es als String zeigt.

Entsprechend der Länge von strings soll der Code nur 2 Mal ausgeführt werden. Wenn 10 und i = 1, aber aus irgendeinem Grund läuft es nur wenn i = 1, so zeigt es nur das zweite Element, und nicht auch das erste.

Ich dachte darüber nach, und ich denke, es hat etwas mit dem onPostExecute Methodencode zu tun. Im Code benötigt man alp als Adapter. Vielleicht hat es etwas damit zu tun?

Können Sie mir bitte helfen? Ich stehe seit über 3 Tagen mit diesem Problem fest und muss dieses Projekt am Ende der Woche beenden.

Wie kann ich alp einstellen, um mehr als ein Element aus dem String-Array gleichzeitig zu enthalten?

+0

Können Sie bestätigen, dass es tatsächlich Größe 2 ist? – Eenvincible

+0

Ja. Ich habe es als Text für TextView gesetzt und ich habe folgendes Ergebnis: [a, b]. Wie ich in der Frage geschrieben habe, bekomme ich nur das Ergebnis, das gleich b im Array ist. – Ido

+0

okay, versuche von Objekt [] zu Strings – Eenvincible

Antwort

0

Ich löste es durch diese Zeile bewegt:

ArrayList<Item> alp = new ArrayList<Item>(); 

Zum onCreate Methode so wird es nicht Schleife es selbst, und löschen Sie die ArrayList Inhalte damit.

-2

Versuchen Sie, diese Linie zu ändern

for (int i = 0; i < strings.length; i++) 

zu:

for (int i = 0; i <= strings.length; i++) 
+0

Ich habe es auch probiert. Es funktioniert nicht – Ido

+1

Es muss weniger als die Länge sein, weil die tatsächliche Länge indexOutofBounds exceception werfen wird – Eenvincible

Verwandte Themen