Daten von Webservice in Listview einlesen

  • Antworten:3
Peter Hafner
  • Forum-Beiträge: 2

21.12.2011, 21:10:15 via Website

Hallo erstmal, ich beschäftige mich seit kurzem mit Android-Entwicklung. Was sich ohne viel Java-Kenntnisse als äusserst schwieriges Unterfangen herausstellt! (Bitte keine Beschimpfungen, ich weiß man sollte Java können :-))

Ich "grabe" mich nun schon länger durch diverse Tutorials, aber irgendwie komm ich nicht weiter.

Ich möchte eine kleine App schreiben, in der ich mit Listviews Kategorien auswähle und dann anhand der Kategorien Ergebnisse anzeigen!

Ich habe bisher noch nicht wirklich herausgefunden, welche Adpater usw. man da am besten verwendet.

Stellt euch vor, die erste Seite soll als Listview Alle Hauptkategorien anzeigen, dann nach Klick auf die Kategorie soll eine neue Activity aufgehen, die Unterkategorien anzeigt, und nach Klick auf die Unterkategorie sollen Ergebnisse anhand dieser Kategorieauswahl ausgegeben werden.

Am Webserver gibt es php-Dateien, welche Daten aus einer mysql-DB lesen und per json-encode and die App retourgeben. Ich hab mir auch schon aus diversen Tutorials irgendwie eine Listview zusammengebaut, welche bei Klick auch eine neue Activity aufruft, allerdings finde ich nicht heraus, wie ich zum 'Listitem' einen Key hinterlegen kann, ich kann derzeit nur mit PutExtra und GetExtra den String des ListItems übergeben...irgendwie muss es da doch eine Möglichkeit geben ID's zu hinterlegen?

Ich denk ich hab das Grundprinzip dieser Listviews noch nicht durchschaut, und finde es aber nicht heraus im Web, hoffe jemand kann mir das mal erklären wie ich das ganze am besten angehe.

Vielen Dank schonmal

— geändert am 21.12.2011, 21:10:34

Antworten
Felix
  • Forum-Beiträge: 259

22.12.2011, 00:36:13 via App

Tach!

ich weiß man sollte Java können :-)

Nunja, fürs Androiden macht es sich ganz gut, aber ansonsten ... so schön ist die Sprache nicht.

Ich habe bisher noch nicht wirklich herausgefunden, welche Adpater usw. man da am besten verwendet.

Kommt ganz auf die Aufgabenstellung an.

allerdings finde ich nicht heraus, wie ich zum 'Listitem' einen Key hinterlegen kann, ich kann derzeit nur mit PutExtra und GetExtra den String des ListItems übergeben...irgendwie muss es da doch eine Möglichkeit geben ID's zu hinterlegen?

Die Listitems können Objekte einer beliebigen Klasse sein. Das macht sich dann mit einem ArrayAdapter<T> ganz gut, beziehungsweise einer davon abgeleiteten Klasse. Was angezeigt werden soll, wird in getView() festgelegt (wenn ich mich nicht irre, kann grad nicht in der Doku nachschauen). Die bekommt die Position in der Liste übergeben, dazu findest du das Element in deiner Datenhaltung und baust eine schöne View zusammen. Beim Auswählen wird auch eine Methode mit Positionsangabe aufgerufen und da kannst du wiederum aus dem zugehörigen Element die Daten für den Intent entnehmen.

Felix.

Antworten
Peter Hafner
  • Forum-Beiträge: 2

22.12.2011, 10:07:26 via Website

Hallo Felix, erstmal danke für die Antwort.

Wenn ich nun eine php-Datei am Webserver ablege, die per Json-Encode die Daten (für Kategorietabelle: (ID,Bezeichnung)) verpackt und übermittelt, heißt das ich muss dann einfach nur mit einem HTTP Request die Daten in der Activity auslesen und in ein JSON-Array schmeissen?
Danach dieses JSON-Array durchlesen, Daten in einen ArrayAdapter einlesen und an ein Listview-Element binden (hiezu selbst ein xml-basteln für die Row und dann die Daten an diese Felder binden)?->Eigentlich nur die Bezeichnung binden (weil ich ja die ID nicht anzeigen will) und dann beim OnClickListener die Position abfragen, anhand der Pos die ID auslesen und an die nächste Activity übergeben um Unterkategorien dieser ID auszulesen?

Hab ichs jetzt halbwegs verstanden?

Antworten
Felix
  • Forum-Beiträge: 259

22.12.2011, 21:03:03 via Website

Tach!

Hab ichs jetzt halbwegs verstanden?

Fast. Jetzt hab ich auch Doku-Zugriff und kann genauer als aus dem Gedächtnis antworten.

Der HTTP-Request liefert Daten und du erhältst sie vom JSON-Parser in einem JSONArray. Ein ArrayAdapter<T> bringt dir hier nicht viel, eine von BaseAdapter abgeleitete Klasse tut es besser. Du musst da eine Handvoll Methoden überschreiben, die alle (außer getCount()) anhand der Position etwas haben wollen. Mit dieser Positionsnummer greifst du auf dein JSONArray zu und lieferst das jeweils geforderte. getCount() ist klar und bedarf keiner weiteren Erklärung. Mit getView() hast du in der Hand, wie das jeweilige Item dargestellt wird, du erzeugst da nach Belieben eine View. getItem() wirst du in deinem Fall nicht brauchen. Aber getItemId() kannst du indirekt aufrufen lassen, wenn du im onItemClick-Handler der ListActivity über das übergebene AdapterView<?>-Objekt dessen getItemIdAtPosition()-Methode aufrufst. Darüber kannst du deine ID für die Unterkategorien als einen long-Wert bekommen.

Ein Beispiel für eine BaseAdapter-Ableitung bietet das Hello-GridView-Tutorial.


Felix.

Antworten