Array mit Schleife füllen. Ein Wert wird nur einmal gefüllt und bleibt danach leer

  • Antworten:3
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 36

19.02.2018, 11:12:09 via Website

Hallo,

ich habe mich ein wenig eingelesen und wollte nun ganz einfach ein ListView mit einem Array füllen. Dieses Array kommt per HTTP und Callback und und ( ja hab gelernt :) ).

Ich habe also einen ListView Adapter erstellt, ein Testarray gefüllt und das ganze getestet. Super klappt. Also ab an den HTTP Teil mit Callback etc. Super auch das hat funktioniert. Ist alles einfacher als gedacht. Nun wollte ich mit dem Response das Array für den ListView füllen und ausgeben mit Custom Row etc. Auch das klappt eigentlich bis darauf, das "Datum" nur beim ersten durchlauf gefüllt und danach nie wieder. Im ListView bleibt das Feld dann auch einfach leer.

Hier mal der Code der Schleife

    @Override
public void onTaskCompleted(String response) {

    String[] data = response.toString().trim().split("&");

    String[] Datumarray = new String[data.length];
    String[] Uhrzeitarray = new String[data.length];
    String[] Eurokursarray = new String[data.length];
    String[] Dollarkursarray = new String[data.length];

    for (int i = 0; i < data.length; i++)
    {
        String[] data2 = data[i].split(";");
        for (int u = 0; u < data2.length; u++)
        {
            String[] data3 = data2[u].split(":");
            if (data3[0].toString().equals("DATUM"))
            {
                Datumarray[i] = data3[1].toString();
                Log.d("Datum", data3[1].toString());
            }

            if (data3[0].toString().equals("EUR"))
            {
                Eurokursarray[i] = data3[1].toString();
                Log.d("Datum EUR", data3[1].toString());
            }

            if (data3[0].toString().equals("USD"))
            {
                Dollarkursarray[i] = data3[1].toString();
                Log.d("Datum USD", data3[1].toString());
            }
        }
    }

    kurseListAdapter whatever = new kurseListAdapter(this, Datumarray, Uhrzeitarray, Eurokursarray, Dollarkursarray);
    listView.setAdapter(whatever);

}

Der String der zerlegt wird sieht wie folgt aus (eine "Reihe"):

DATUM:2018-02-19-10-36-12;EUR:1.00;USD:1.2464;JPY:132.34;BGN:1.9558;CZK:25.340;DKK:7.4481;GBP:0.88803;HUF:311.28;PLN:4.1597;RON:4.6625;SEK:9.9140;CHF:1.1521;ISK:125.20;NOK:9.6810;HRK:7.4380;RUB:70.2884;TRY:4.6784;AUD:1.5695;BRL:4.0314;CAD:1.5587;CNY:7.9077;HKD:9.7479;IDR:16848.21;ILS:4.4211;INR:80.0440;KRW:1327.26;MXN:23.0626;MYR:4.8541;NZD:1.6853;PHP:65.121;SGD:1.6336;THB:39.000;ZAR:14.5331&

mit mehreren Reihen:

DATUM:2018-02-19-10-36-12;EUR:1.00;USD:1.2464;JPY:132.34;BGN:1.9558;CZK:25.340;DKK:7.4481;GBP:0.88803;HUF:311.28;PLN:4.1597;RON:4.6625;SEK:9.9140;CHF:1.1521;ISK:125.20;NOK:9.6810;HRK:7.4380;RUB:70.2884;TRY:4.6784;AUD:1.5695;BRL:4.0314;CAD:1.5587;CNY:7.9077;HKD:9.7479;IDR:16848.21;ILS:4.4211;INR:80.0440;KRW:1327.26;MXN:23.0626;MYR:4.8541;NZD:1.6853;PHP:65.121;SGD:1.6336;THB:39.000;ZAR:14.5331& DATUM:2018-02-19-09-36-12;EUR:1.00;USD:1.2464;JPY:132.34;BGN:1.9558;CZK:25.340;DKK:7.4481;GBP:0.88803;HUF:311.28;PLN:4.1597;RON:4.6625;SEK:9.9140;CHF:1.1521;ISK:125.20;NOK:9.6810;HRK:7.4380;RUB:70.2884;TRY:4.6784;AUD:1.5695;BRL:4.0314;CAD:1.5587;CNY:7.9077;HKD:9.7479;IDR:16848.21;ILS:4.4211;INR:80.0440;KRW:1327.26;MXN:23.0626;MYR:4.8541;NZD:1.6853;PHP:65.121;SGD:1.6336;THB:39.000;ZAR:14.5331&

Das Array sieht befüllt jedoch so aus

Datumarray[0] <== Hat das Datum
Eurokursarray[0] <== Eurokurs
Dollarkursarray[0] <== Dollarkurs

Super aber in den weiteren Zeilen dann so

Datumarray[1] <== ist LEER
Eurokursarray[1] <== Eurokurs
Dollarkursarray[1] <== Dollarkurs

Das Datumarray wird nur das erste mal befüllt und bleibt danach immer leer. Ich kann allerdings keinen Fehler erkennen.

— geändert am 19.02.2018, 12:41:41

Diskutiere mit!
  • Forum-Beiträge: 2.902

19.02.2018, 11:27:12 via Website

Moin ,

du verwendest einen C/C++ Stil im Array Zugriff -

Unter Android sollte man besser dynamische Arrays verwenden -> z.b. ArrayList
und dann mir add, get arbeiten.
Das Ganze in einen (Base) Adapter zum View und dann notifydatasetchanged bei Änderungen.
Innerhalb eines Threads ein runnable-Block auf den UI Thread

Hast du ein mehrdimensionales Array, dann muss ein CustomAdapter für den View her.

P.S ListView ist veraltet , nimm besser RecycleView

— geändert am 19.02.2018, 12:36:08

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.168

19.02.2018, 13:18:39 via App

Hallo DmanT,
Ich habe deinen Thread mal in den passenden Bereich verschoben. ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 36

23.02.2018, 12:41:40 via Website

swa00

Moin ,

du verwendest einen C/C++ Stil im Array Zugriff -

Unter Android sollte man besser dynamische Arrays verwenden -> z.b. ArrayList
und dann mir add, get arbeiten.
Das Ganze in einen (Base) Adapter zum View und dann notifydatasetchanged bei Änderungen.
Innerhalb eines Threads ein runnable-Block auf den UI Thread

Hast du ein mehrdimensionales Array, dann muss ein CustomAdapter für den View her.

P.S ListView ist veraltet , nimm besser RecycleView

Ja, den Stil, naja, 90% C/C++ aber ich werde es mir noch aneignen :) Das mit dem View war interessant, hab ich mir mal angesehen aber mit dem CustomAdapter, den nutze ich ja bereits allerdings lag der Fehler im Protokoll. Am Ende gab es immer noch das "&" Zeichen, also es kommt noch ein Datensatz, der war natürlich leer. Die Anpassung des API Codes brachte dann Erfolg.

Hilfreich?
Diskutiere mit!

Empfohlene Artikel