Variable String[] aufbauen mit JSON Daten

  • 8 Antworten
  • Neuester Beitrag
Diskutiere Variable String[] aufbauen mit JSON Daten im Android App Entwicklung im Bereich Betriebssysteme & Apps.
M

MichaTz

Neues Mitglied
Hallo zusammen,

für die Entwicklung des Inhalts einer GridView habe ich eine feste Variable, die wie folgt aufgebaut ist:

Code:
private String[] ausgabe = { "URL.jpg",
            "URL",
            "URL.jpg",
            "URL.jpg",
            "URL.jpg"};
Da diese Variable aber statisch ist, versuche ich gerade diese Variable dynamisch aufzubauen und zwar mit Daten, die ich per JSON abrufe mit meinem folgenden Code:

Code:
private String[] ausgabeString;

 try {
            jsonResult = new JSONData().open("URL MIT JSON Daten");
            JSONArray neuheiten = new JSONArray(jsonResult.getString("jsonArrayFromURL"));

            List<String> ausgabeString = new ArrayList<String>();

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

                JSONObject jsonRow = neuheiten.getJSONObject(i);

                ausgabeString.add(jsonRow.getString("image"));

            }

            [TESTBEREICH]
            // ArrayList to String[] Array
            String[] listArr = new String[ausgabeString.size()];
            listArr = ausgabeString.toArray(listArr);
            
            for(String s : listArr )
                System.out.println(s);
            [/TESTBEREICH]

            // Ausgabe
            Log.d("Test ::: ", ausgabeString);


        } catch (Exception e) {
            android.util.Log.d("Fragment Error :::: ", e.toString());
        }
Das JSON funktioniert soweit. Beim Zusammenbau sieht der Inhalt der Variable aber wie folgt aus:

[URL1.jpg,URL2.jpg,URL3.jpg,URL4.jpg]

D.h. außen müsste statt [ ] => { } sein und vor und hinter der JPG URL müssten " Zeichen stehen.

Ich habe noch versucht mit .toArray (Bereich [TESTBEREICH]) dies umzuwandeln, leider ohne Erfolg. Hat jemand einen Vorschlag / Idee?

Danke im Voraus!

LG Micha
 
D

deek

Stammgast
Das ist schon korrekt so, das [...] ist ja nur die String Repräsentation deiner Liste. Ob du die Umwandlung in dein Array machst ist Geschmacksache ob du ein Array oder eine Liste willst.
 
M

MichaTz

Neues Mitglied
Das Problem ist, wenn ich das [ ... ] an meine Funktion weiter liefere, dann bricht diese mit einem Fehler ab, dass die Inhalte falsch angeliefert werden. Selbst wenn ich die " Zeichen in der Zeile

Code:
ausgabeString.add(jsonRow.getString("image"));
mit übergebe. Ich denke ich brauche das als Array in Form von String[], eine GridView ist ja keine ListView.

Oder bringe ich da jetzt etwas durcheinander?
Ich komme aus dem PHP / MySQL / iOS Entwicklungsbereich, JAVA ist noch Neuland für mich. :unsure:
 
D

deek

Stammgast
Dann solltest du dir erstmal die Grundlagen von Java aneignen, also Typen und Generics in deinem Fall. Wohin willst du denn die Werte übergeben? Also an welche Methode, nach der Signatur musst du dich richten.
 
M

MichaTz

Neues Mitglied
Hey deek,
ja allein diese folgende Funktion liefert schon einen Error zurück.

Funktion
Code:
private class ImageAdapter extends BaseAdapter {

private int mNumColumns = 0;

[.....]

 @Override
        public int getCount() {
            // If columns have yet to be determined, return no items
            if (getNumColumns() == 0) {
                return 0;
            }

            // Size + number of columns for top empty row
            return ausgabeString.length + mNumColumns;    <----- Zeile 350
        }
}
Error
Code:
FATAL EXCEPTION: main
    Process: xxxxx, PID: 10393
    java.lang.NullPointerException
at xxxxxx$ImageAdapter.getCount(ImageGridFragment.java:350)
getCount() überschreibt die getCount() Methode im android.widget.Adapter

Der Error liegt hier ---> ausgabeString.length

Ich denke einfach, dass das String[] Array das ich aufbaue, falsch ist, um dies durch diese Funktion zu jagen.
 
D

deek

Stammgast
ausgabeString (übrigens ein sehr schlechter Name für ein ARRAY) ist schlicht und ergreifend (noch) null. also entweder auf null prüfen und dann 0 zurückgeben, oder vorher instanziieren. Dein Füllcode ist wahrscheinlich noch nicht gelaufen. (was in einem Adapter Sinn macht, der springt sofort beim View aufbauen an, während das Laden deines JSON in einem asynchronen Thread passieren muss, weil Netzwerk-Interaktion)
 
M

MichaTz

Neues Mitglied
ausgabeString ist wirklich ein schlechter Name :rolleyes2:

Habe deine Aussage gerade mal versucht nachzuvollziehen. Es gibt wirklich keine Ausgabe an der Stelle, wo ich bereits eine erwartet hätte. Aber klar, wenn der JSON Code noch nicht komplett durchgelaufen ist, während sich die View aufbaut, läuft er auf NullPointerException.

Ich habe jetzt das JSON try { } aus der oncreate() in eine

Code:
private class AsyncTaskRunner extends AsyncTask<String, String, String> { }
getan und dann mittels doInBackground() und onPostExecute() die Lösung gefunden.

Das doInBackground() startet das JSON und wenn fertig, übernimmt das onPostExecute() die Darstellung der Bilder in der GridView.

Vielen Dank für deine Hilfe !! Wie kann man sich hier eigentlich bedanken? :huh:
 
Jaiel

Jaiel

Experte
1 Beitrag mehr so dass du 10 hast und du siehst einen Danke button ;)
 
M

MichaTz

Neues Mitglied
Ah alles klar, dann gibts jetzt mal ein fettes Danke :D
 
Ähnliche Themen - Variable String[] aufbauen mit JSON Daten Antworten Datum
16