Generiere Listenansicht von JSON in Android

7

Ich bin völlig neu in Android und versuche derzeit, ListView von JSON-Array zu generieren, die von meinem Server gezogen wurde, habe ich viele Tutorials ohne Glück gelesen, gibt es eine einzigartige Möglichkeit, das zu tun. Könnten Sie bitte auf einige Ressourcen hinweisen, die gut beginnen können?

Ich habe diese Seite gelesen, wie auch immer ich bin steckte mit dem folgenden Code:

%Vor%

gib mir "" als keine identifizierte Ressource:

%Vor%

Danke, jede Hilfe wird sehr geschätzt!

    
Mike 28.09.2012, 14:53
quelle

5 Antworten

16

JSON & amp; listview ll funktionieren so ..

1.Anzeigen einer Liste von Elementen

Das Android-SDK bietet eine praktische Möglichkeit, eine Liste von Daten mithilfe einer Superklasse namens android.app.ListActivity schnell anzuzeigen. Diese Aktivität stellt bereits eine ContentView bereit, die mit einem ListView konfiguriert wurde und bereit ist, Daten zu verwenden und mit Daten zu füllen.

Der ListView muss jetzt Daten zum Anzeigen erhalten, zusammen mit einer Möglichkeit, diese Daten in Zeilen abzubilden. ListAdaptors stellen diesen Mechanismus bereit und werden auf der zugrunde liegenden ListView der ListActivity mithilfe von SetListAdaptor festgelegt.

Ein Android-SDK hat den Adapter (ArrayAdaptor) bereitgestellt, der weiß, wie Arrays beliebiger Daten in ListViews gehandhabt werden. (Das Android-SDK enthält auch einige andere ListAdaptors , z. B. Cursor-Adapter, die beim Verbinden von lokalem Datenspeicher helfen können) zu einer ListView). Sie müssen dem Adapter auch ein Layout bereitstellen, mit dem die Elemente in jeder Zeile gerendert werden können. Im folgenden Beispiel verwenden wir das von Android SDK gelieferte Layout simple_list_item_1, bei dem es sich um eine einzelne Textbeschriftung handelt, die sich perfekt für die einzelnen Strings eignet:

%Vor%

2. Anpassen des Aussehens jedes Listenelements

Um dies zu erreichen, müssen Sie über das eingebaute Layout und ArrayAdaptor hinausgehen und stattdessen Ihr eigenes implementieren.

Beginnen Sie damit, eine Klasse ABC zu erstellen, die sowohl den Autor als auch den Inhalt als Strings enthalten kann. Erstellen und füllen Sie dann ein Objekt mit einigen Testdaten, die im benutzerdefinierten Listenelement angezeigt werden sollen:

%Vor%

Erstellen Sie eine Layout-XML-Datei in /res/layout/list_item.xml , um zwei TextViews zu definieren, um den Inhalt und den Autor in separaten Zeilen anzuzeigen. Um sie übereinander anzuzeigen, verwenden Sie ein LinearLayout, das so konfiguriert ist, dass jedes Element vertikal in (android:orientation="vertical") dargestellt wird.

Sobald die XML-Datei erstellt wurde, fügt das Android Eclipse-Plugin sie automatisch als Referenz in die generierte R-Datei ein. Diese R-Datei befindet sich im Ordner / gen Ihres Projekts und fungiert als Brücke zwischen Ihren XML-Elementen und Ihrem Java-Code. Es ermöglicht Ihrem Java-Code, XML-Elemente und Dateien, die in den Ordnern / res erstellt wurden, zu referenzieren. Die Datei, die Sie gerade erstellt haben, kann jetzt im Java-Code als R.layout.list_item referenziert werden, wie Sie es als nächstes im benutzerdefinierten Listenadapter tun werden.

Erstellen Sie eine private Klasse (innerhalb der Aktivität) mit dem Namen ListAdaptor , welche Unterklassen ArrayAdaptor . Diese Klasse sollte verwendet werden, um eine ArrayList zu speichern, die angezeigt wird, und bietet eine Möglichkeit, die Objekte dem TextViews zuzuordnen, das Sie im obigen Layout erstellt haben.

Diese Zuordnung überschreibt das ListAdaptor und sollte ein View-Objekt zurückgeben, das mit dem Inhalt der Daten an der gewünschten Position gefüllt ist.

Die vollständige Implementierung des benutzerdefinierten abcListAdaptors finden Sie unten:

%Vor%

Nun kann die onCreate-Methode angepasst werden, um den benutzerdefinierten Listenadapter mit den erstellten Testdaten wie folgt zu verwenden:

%Vor%

3.Zugriff auf entfernte Dienste und Parsing von Daten

Das Android SDK enthält Pakete, die den Zugriff auf HTTP-basierte APIs vereinfachen sollen. Die Apache HTTP-Klassen wurden hinzugefügt und können unter org.apache.http package gefunden werden. Sie verwenden diese Klassen zusammen mit den org.json -Klassen, um die von einem Server zurückkommenden Daten zu analysieren.

Wir können eine private Methode in der Aktivität erstellen, die eine Anfrage erstellt, das Ergebnis analysiert und ein ArrayList von Objekten zurückgibt. Der unten aufgelistete Code erstellt die Anfrage und sucht nach der resultierenden JSON array , die iteriert wird, um jeden Text und from_user-Elemente zu extrahieren.

%Vor%

Ersetzen Sie nun die Dummy-Daten, die Sie zuvor mit einem Aufruf verwendet haben, durch die load-Methode, wenn Sie den benutzerdefinierten Listenadapter in der onCreate-Methode erstellen.

%Vor%

4.reaktive Benutzeroberfläche erstellen

Der Code in seinem aktuellen Zustand kann dazu führen, dass ein Anwendungsantworter (ANR) -Dialog erscheint, der den Benutzer auffordert, Ihre App zu beenden. Dies kann aufgrund der langwierigen Arbeit einer Remoteanforderung für Daten auftreten, die innerhalb von Methoden wie onCreate ausgeführt werden.

Lang andauernde Aufgaben sollten niemals im Hauptanwendungs-Thread (der die Ereignisschleife der Benutzerschnittstelle steuert) ausgeführt werden. Sie sollten stattdessen in untergeordnete Threads erzeugt werden, um die Arbeit auszuführen.

Obwohl die Thread -Klasse von Java für diese Aufgabe verwendet werden kann, ist es eine Schwierigkeit, dass nach Beendigung der lang andauernden Aufgabe die Benutzeroberfläche im Allgemeinen so geändert werden muss, dass die Ergebnisse gemeldet werden (dh eine Liste anzeigen) von einer Anfrage geladen).

Der Status der Benutzeroberflächenelemente kann nur vom Hauptthread geändert werden, da das Android UI-Toolkit nicht threadsicher ist. Daher muss der Hintergrundthread eine Nachricht an den Hauptthread senden, um die Benutzeroberfläche zu bearbeiten.

>

Zum Glück bietet das Android SDK eine praktische Klasse AsyncTask, die einen einfachen Mechanismus für die sichere Interaktion von asynchronen Aufgaben mit dem UI-Thread bietet.Dies wird erreicht, indem AsyncTask abgeleitet und die doInBackground-Methode überschrieben wird, um die lang andauernde Aufgabe auszuführen, und dann onPostExecute überschreiben, um Manipulationen auf der Benutzeroberfläche durchzuführen.

Wenn die AsyncTask erstellt wird (sie muss im UI-Thread erstellt werden) und ausgeführt werden, wird die doInBackground-Methode in einem Hintergrundthread aufgerufen. Nach Abschluss wird die onPostExecute-Methode im Hauptthread der Benutzeroberfläche aufgerufen.

Um dies in Ihrer App zu verwenden, müssen Sie innerhalb der Aktivität (wie die benutzerdefinierte Adapterklasse) eine private Klasse namens MyTask implementieren, die AsyncTask ableitet. Sie können die doInBackground-Methode mit dem Inhalt Ihrer vorherigen Lademethode überschreiben.

Anstatt die ArrayList zurückzugeben, pflegen Sie eine Instanzvariable in der Aktivität, damit die Daten in den privaten Klassen gemeinsam genutzt werden können. Dann können Sie im onPostExecute den Listenadapter mit den Daten einstellen, wie zuvor in onCreate. Die onCreate-Methode erstellt nun einfach das MyTask-Objekt und ruft die execute-Methode auf.

Beste Websites für listView sind > & amp; das .

-

Grüße

TechEnd

    
Rahul Baradia 05.10.2012, 05:41
quelle
4

Sie müssen die wichtigen Elemente Ihres JSON-Objekts in einem neuen Objekt speichern, das Sie selbst erstellt haben.

Nehmen wir an, Ihr JSON-Objekt gibt Ihnen Schlüssel mit Namen, Datum und Telefonnummer, Sie benötigen ein Objekt, das diese Art von Informationen enthält.

Ihre Listenansicht nimmt einen Array-Adapter Ihres neuen Typs, jede Zelle der Listenansicht enthält UI-Elemente (z. B. Textansichten), die mit den Informationen Ihres Objekts gefüllt sind

es ist mindestens ein 3-Schritt-Prozess, und Sie müssen Lösungen für jeden dieser Schritte einzeln angehen

    
CQM 28.09.2012 14:57
quelle
3
  

Probieren Sie diesen Code in Ihrer Aktivität zuerst json Daten in String-Array zu parsen   und setze dann adapter deine listeansicht in xml deiner aktivität

%Vor%     
Ashwani Tyagi 04.10.2012 12:29
quelle
1

Ich habe eine gute Ressource zu dem Thema gefunden. Jetzt habe ich meine Liste mit JSON-Daten. Sehr empfehlenswert für alle Neulinge. Danke Jungs um Hilfe.

    
Mike 01.10.2012 18:47
quelle
0

Ich empfehle Ihnen, diese Schritte zu befolgen:

  1. Daten aus dem Internet abrufen und speichern
  2. Übergeben Sie die gespeicherten Daten an einen Adapter
  3. Setzen Sie den Adapter auf Ihre Liste

Im ersten Schritt empfehle ich, dass Sie die Daten mithilfe der Klasse AsyncTask abrufen, mit der Hintergrundoperationen ausgeführt und Ergebnisse auf dem UI-Thread veröffentlicht werden können, ohne dass Threads und / oder Handler manipuliert werden müssen. Zweitens müssen Sie Ihren Inhalt entsprechend der JSON-Struktur analysieren, die Sie erhalten. Übergeben Sie schließlich Ihre Daten an einen Adapter, um Ihre Liste aufzufüllen.

    
Thiago M Rocha 01.10.2012 12:51
quelle

Tags und Links