AsyncTask: "Daten von Webseite nachladen" Wie macht man das "ordentlich"?

  • Antworten:5
Alexander F.
  • Forum-Beiträge: 8

19.01.2014, 23:28:44 via App

Hallo, ich bin seit kurzem dabei mich nebenbei mit Java und Android zu beschäftigen und versuche mich an meiner ersten kleinen APP.
Ziel ist, Informationen von einer Webseite aus zu lesen und in einem listview an zu zeigen.
Nachdem ich jetzt viel gelesen, kopiert/eingefügt und ausprobiert habe, funktioniert das rudimentär. APP startet, ein asynctask lädt die Daten (Picasso lädt die passenden Bildchen) und ein modifizierter array Adapter packt alles in eine listview.
Schön und gut, jetzt hat die Webseite allerdings mehrere Seiten, die ich nach einem klick auf einen Button am Ende der listview auch noch nachladen möchte. irgendwie würde ich das sicher hingenommen, nur bestimmt nicht "schön" ;).

Eventuell hat ja jemand ein paar Denkanstöße für mich!?
Sollte ich noch einen neuen asynctask bauen, den ich dann immer wieder aufrufe oder lieber den ersten, so modifizierten, das ich in dem feststellen ob er ein zweites mal aufgerufen wird um dann die nächste Seite auszuwerten oder ganz was anderes?

Grüße
Alexander

edit: erster Beitrag und gleich fehlt ein Wort im Titel (Wie...) Leider kann ich das vom Tablett nicht verbessern.

— geändert am 22.01.2014, 23:08:39

Antworten
Phil G.
  • Forum-Beiträge: 86

20.01.2014, 00:43:35 via Website

Also Code sollte immer re-useable sein. Sprich wenn du weisst das das Handling mehrmals auftaucht, dann schreib doch deinen Code so, das er mit Parametern (Neue Seite = Neue Url und die einfach übergeben) arbeitet. -> Wenn man ganze Funktionseinheiten wiederbenutzen möchte, bietet es sich an diese in ein Fragment zu kapseln.


Keine Ahnung wie die Webseite jetzt aussieht, sprich sind die Informationen gleichwertig, sind es "Kind"-Informationen ect pp.
-> soll wirklich über einen Button am unteren Bildschirmrand gewechselt werden ? oder gibt es andere Möglichkeiten ?
-> unter http://developer.android.com/training/best-ux.html findet man Ansätze für gängige Navigationspattern unter Android.

in deinem Fall (kommt jetzt halt drauf an was das für Infos sind) könnte ich mir vorstellen

-> deine Activity besteht aus einem Viewpager, welches eine Anzahl x Fragmente mit Listview hat. Mit eine Swipegeste wechselt man zwischen den einzelnen "News"/"Informationen"

-> wenn man den User nicht ständig mit nachladen nerven möchte, könnte man auch die Daten noch cachen (SQLite, Mem-Cache) wie auch immer

Antworten
Alexander F.
  • Forum-Beiträge: 8

20.01.2014, 09:42:14 via App

Es handelt sich um Termine, die ich recht leicht mit jsoup parse (ein Bild und wenig Text). Bis jetzt wird nur eine Activity mit einer ListView, in die ich erstmal alle Termine packen möchte, angezeigt. Auch das speichern der Daten und wechseln zu einer anderen Activity möchte ich erst später angehen.

Ein Button zum nachladen ist bei zweitem nachdenken doch irgendwie Quark, spätestens wenn mehr Funktionen dazu kommen (z.B. Suche / Filter).

Am liebsten würde ich am Anfang die erste Seite auslesen, damit der Benutzer nicht ewig warten muss, bis er etwas zu sehen bekommt und dann im Hintergrund die restlichen Seiten parsen.
Allerdings stehe ich da vor dem Problem, wie ich das am besten manage. Kann ich den asynktask einfach nach beenden automatisch ein weiteres mal starten? ich stelle mir ein "Event"(?) vor, dass nach beenden des asynktask prüft ob noch Seiten zum parsen vorhanden sind und den asynktask dann neu startet. Ist das möglich und sinnvoll?

Grüße
Alex

Antworten
impjor
  • Forum-Beiträge: 1.793

20.01.2014, 14:18:02 via App

Ich würde einen AsyncTask benutzen, der alle Webseiten nacheinander herunterlädt, parst, ... und nach dem er eine Webseite heruntergeladen hat über publishProgress() die Benutzeroberfläche aktualisiert. (Z.B. erste Seite anzeigen.)
Denn einnen AsyncTask darfst du nicht nocheinmal starten.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Alexander F.
  • Forum-Beiträge: 8

20.01.2014, 14:27:12 via App

Das werde ich testen! Danke Euch beiden, ich gebe Rückmeldung, wenn ich so weit bin.
Grüße
Alex

Antworten
Alexander F.
  • Forum-Beiträge: 8

22.01.2014, 00:30:00 via App

Heute hatte ich endlich Zeit um onProgressUpdate()... zu testen. ich habe erstmal nur getestet ob es generell funktioniert und siehe da, es klappt. Bis jetzt rufe ich onProgressUpdate() nur einmal auf, das herunterladen der weiteren Seiten werde ich bei nächster Gelegenheit dazu packen. Danke nochmal!

Edit: So, nachdem ich jetzt alle Seiten nacheinander parse, möchte ich eben noch eine positive Rückmeldung geben. Es klappt alles super mit publishProgress(). Nach jeder Seite gebe ich die Daten zur ListView weiter.
Jetzt werde ich das gelernte erstmal verdauen und meinen "gewurstelten" Quelltext aufräumen :). Dann geht es an das speichern der Daten aber das ist ein anderes Thema...

Grüße
Alex

— geändert am 22.01.2014, 23:12:15

Antworten