Programmieren einer Vertretungsplan-App(Schule)

  • Antworten:40
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 293

20.02.2017, 19:49:54 via App

Es ist wie folgt! Meine Schule hat seit heute endlich einen Online Vertretungsplan, welcher in Tabellenform über einen Link aufgerufen werden kann. Da alles nicht wirklich gut auf dem Handy ablesbar ist und die Website viel zu schnell Autoscrollt, wollte ich das ganze per Android Studio als App umsetzten! Habe es mit der Prozedur WebView bereits versucht, jedoch gibt die nur die unveränderte Website in der App wieder.

Uploaded with Directupload Image Sharer

Ist es möglich den Inhalt der Website auszulesen und in der App in einer eigenen ListView darstellen zu lassen???

Danke im voraus für die Hilfe 👍

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 2.909

20.02.2017, 19:56:04 via Website

Hallo Rick,

dein Beitrag gehört eher in den Entwicklungsbereich .
Ein Mod wird diesen wahrscheinlich gleich dorthin verschieben.

Zu Deiner Frage :

Ja das ist möglich :

Unter Android native Java benötigst du einen URL Zugriff in einem Thread (z.b. AsyncTask)
und danach die Daten z.b. mit der Jsoup Library parsen

Zum Schluss kannst Du dir dann noch Message mit den Notifier ausgeben lassen
("Müller ist krank, kannst weiterschlafen")

Aus einem WebView kannst du die Daten nur mit einem Javascript Injection auslesen

— geändert am 20.02.2017, 20:28:24

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

Antworten
  • Forum-Beiträge: 293

20.02.2017, 20:10:25 via Website

@swa00

O_o Davon hab ich ja noch gar nicht gehört!!! Gibt's das zufällig Beispiele für ????

@Ludy

Vielen Dank !

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 2.909

20.02.2017, 20:14:24 via Website

Hallo Rick,

O_o Davon hab ich ja noch gar nicht gehört!!! Gibt's das zufällig Beispiele für ????

Jede Menge

z.b die offizielle Dokumentation von Google
https://developer.android.com/training/basics/network-ops/connecting.html

und Jsoup
https://github.com/jhy/jsoup

oder

Javascript Injection
http://stackoverflow.com/a/8623129

— geändert am 20.02.2017, 20:19:08

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

Antworten
  • Forum-Beiträge: 293

20.02.2017, 20:23:57 via App

Vielen Dank für die schnelle Hilfe und die Links! Werde mich da mal rein lesen! 🔝

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 293

21.02.2017, 10:10:48 via App

@swa00

Ein Problem besteht noch! Der Html code der Seite bleibt immer gleich! Nur die Tabelle wird jedesmal neu generiert.

Jemand eine Idee wie ich an den Script komme ???

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 2.909

21.02.2017, 10:13:47 via Website

Hallo Rick,

ich vermute mal ganz stark, dass du dich vor Deiner letzten Frage, noch nicht mit Jsoup
auseinander gesetzt hast - richtig ? :-)

— geändert am 21.02.2017, 10:14:45

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

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

21.02.2017, 10:19:12 via App

Solange die Struktur der html gleich bleibt, kannst du mit Jsoup einen Parser erstellen, der dir die Daten liest. Mit der passenden Objektstruktur und einer RecyclerView bzw TableView kannst du dass dann schön aufbereitet anzeigen.

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

swa00

Antworten
  • Forum-Beiträge: 293

21.02.2017, 11:58:23 via App

@swa00

Der jsoup erkennt nur die Ladeseite der Tabelle und nicht die generierte Tabelle :/

Wenn man die Seite auf Ruf wird erst angezeigt: Webuntis wird geladen
Nach 5 sek wird dann die generierte Tabelle angezeigt

— geändert am 21.02.2017, 12:01:47

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 2.909

21.02.2017, 12:13:39 via Website

Der jsoup erkennt nur die Ladeseite der Tabelle und nicht die generierte Tabelle :/

.... dann parst du zu früh.

Wenn du eine zeitliche Verzögerung hast (nachladen) , dann musst du Dir ein abgeleitetes WebViewClient bauen,
auf onPageFinished warten und dann erst parsen /auswerten

— geändert am 22.02.2017, 11:15:05

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

Antworten
  • Forum-Beiträge: 2.909

21.02.2017, 12:21:23 via Website

Na ja, dann hätte er wohl kaum im Entwicklungsbereich nachgefragt :-)

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

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.182

21.02.2017, 12:25:16 via App

Webuntis läd die eigentliche statische Html per JS scripts nach.
Du müsstest entweder den Link zur html suchen und den dann laden oder warten bis es geladen ist und dann die Dom auswerten.

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

swa00

Antworten
  • Forum-Beiträge: 293

21.02.2017, 20:24:07 via App

Wie schafft man es eigentlich das gewartet wird bevor er den Html Code ausgewertet wird ???

Habe schon mit Headless Browser umd html units versucht leider erfolglos :/

@Pascal P.

Und wo findet man ungefähr die statische Html ???

— geändert am 21.02.2017, 20:41:37

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 2.909

21.02.2017, 20:53:02 via Website

Wie schafft man es eigentlich das gewartet wird bevor er den Html Code ausgewertet wird ???

Das habe ich dir bereits oben beschrieben :

Wenn du eine zeitliche Verzögerung hast (nachladen) , dann musst du Dir ein abgeleitetes WebViewClient bauen,
auf onPageFinished warten und dann erst parsen /auswerten

— geändert am 22.02.2017, 11:14:54

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

Antworten
  • Forum-Beiträge: 2.498

21.02.2017, 21:07:23 via App

Ich werfe Mal den Begriff Scraping in den Raum, das ist das was du tun willst. Also aus der Website Informationen rauslesen.

Eventuell solltest du da nochmal zu recherchieren. Mehr kann ich dir leider auch nicht sagen.

Liebe Grüße, Rexxar :)
Moto Z Play Stock
Nvidia Shield Tablet K1
http://www.androidpit.de/forum/634540/allgemeines-faq-fuer-neulinge

Antworten
  • Forum-Beiträge: 2.909

21.02.2017, 21:25:53 via Website

Ich werfe Mal den Begriff Scraping in den Raum

Seine Daten sind bereits da, und er benötigt kein Scraping.
Es geht ihm um das ordentliche Warten und Parsen , nachdem die Objekte bereits im Memory sind

Bitte nicht verwirren lassen

— geändert am 21.02.2017, 22:12:08

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

Antworten
  • Forum-Beiträge: 293

22.02.2017, 08:58:37 via App

@swa00

Ich komme nicht dahinter wie du das mit dem Warten meinst 🤔

Gibt es da einen Beispiel-Code ???

Ist es kein iPhone... Ist es ein Android !!!

Samsung Galaxy S7 edge ; SM-G935F ; Android 7.0
Samsung Gear S2 classic
Samsung Galaxy Note 7 ; SM-N930F ; Android 6.0.1 ; R.I.P

Antworten
  • Forum-Beiträge: 2.909

22.02.2017, 09:07:31 via Website

na dann mal nochmal in Schritten :-)

a) du hast festgestellt , dass beim Aufruf der Seite die Tabelle später kommt und du nicht weist , wann diese da ist , damit du anfangen kannst zu parsen.

b) Daraufhin hat dir Pascal geschrieben

Webuntis läd die eigentliche statische Html per JS scripts nach.

c) Das heisst , du musst warten , bis die Seite KOMPLETT geladen ist.

d) Dazu musst Du dir deine eigene abgeleitete Klasse von WebViewClient bauen und darin auf das Callback
onPageFinished() reagieren.

 public class myWebClient extends WebViewClient
 {
    @Override
    public void onPageFinished(WebView view, String url)
    {
        super.onPageFinished(view, url);
        //  Hier Content aus WebView ermitteln und parsen
        //  http://stackoverflow.com/questions/2376471/how-do-i-get-the-web-page-contents-from-a-webview/8623129#8623129
    }
 }

Und das Ganze habe ich Dir oben schon zweimal geschrieben !

Code erstellen wir hier nicht

— geändert am 22.02.2017, 11:59:51

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

Antworten

Empfohlene Artikel