eine App mit externen Texten entwickeln (als AppDev-Anfänger)

  • Antworten:8
Tibor Csötönyi
  • Forum-Beiträge: 4

03.11.2011, 20:53:49 via Website

Hallo liebe Androidpit-Community,
ich möchte die Gelegenheit nutzen, mich vorzustellen...
ich bin der Tibor, (fast) 22 Jahre jung und studiere Medieninformatik im 3. Semester, bin also kein Programmieranfänger, was auch daran liegt, dass ich schon lange freizeitmäßig viel und gern ein bisschen herumprogrammiere.

Nun zu meiner Problemstellung. Ich habe mir das Android SDK mit allem drum und dran heruntergeladen, da ich mittlerweile seit einem Jahr mit Android "arbeite". Da ich an der TU Dresden studiere und diese ein Einschreibungssystem nutzt, welches sich "jExam" nennt und es dafür bis heute keine App gibt, um unterwegs seine Prüfungsergebnisse abzurufen oder sich für Übungen ein- bzw. auszuschreiben etc. pp., habe ich mich dazu entschlossen, diese wahrscheinlich unwahrscheinlich schwere Sache mal anzugehen.

Die Internetseite sieht so aus, dass man sich zu allererst einloggen muss, und dann in eine Übersicht kommt:


Diese Übersicht und natürlich die jeweiligen Inhalte möchte ich in die App implementieren. Da ich aber nun ein absoluter Anfänger in der Szene App-Development bin (habe aber Grundkenntnisse in Java!), bin ich auf die Hilfe der Community angewiesen.

Nun würde ich gerne wissen, wie es möglich ist, erstmal überhaupt die Daten meines "Login-Formulares" quasi an den Server zu übertragen und dann später alles abzurufen?

Würde mich über rege Teilnahme eurerseits freuen :D

MfG Tibor

— geändert am 03.11.2011, 20:55:15

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

03.11.2011, 22:10:22 via App

Hey,
hab mal eben gegoogelt und unter http://jexam.inf.tu-dresden.de/info.html folgende Information gefunden:
WebService: Mit dem jExam Webservice ist es möglich, über eine XML-Schnittstelle bestimmte Informationen aus der Datenbank, beispielsweise die Auflistung aller Lehrveranstaltungen oder Mitarbeiter eines Instituts, mittels vorhandener Methoden abzufragen. Der Webservice basiert auf WSDL (Beschreibung der Methoden) und SOAP (Aufruf-Kommunikation).Abfragen sind nur aus dem uni-internen Netz heraus gestattet.
Soweit ich das verstehe, gibt es zwar eine Art API, aber die scheint nur im internen Netzwerk zu funktionieren..
Lg Ansgar

Antworten
Tibor Csötönyi
  • Forum-Beiträge: 4

03.11.2011, 22:11:52 via Website

Aber wenn ich aus dem externen Netz auch auf die Seite und deren Informationen zugreifen kann (also demnach auch direkt Abfragen machen kann?!), muss es doch auch möglich sein, dies mithilfe einer App zu gestalten?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

03.11.2011, 22:39:28 via App

Klar,
halt nur nicht so komfortable :)
Lg Ansgar

Antworten
Tibor Csötönyi
  • Forum-Beiträge: 4

03.11.2011, 22:44:15 via Website

Naja das soll mich erstmal nich stören. Wie gestalte ich das denn am besten?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

03.11.2011, 22:54:28 via App

Naja,
das Naheliegendste wäre die Website, die dir angezeigt wird, zu parsen, also letztendlich auf Informationen zu durchsuchen ("den Rest wegschneiden"). Wie man sich einloggt hängt davon ab, wie genau das auf der Seite geschieht. Hab da aber keine Erfahrung, würde da selbst erstmal googlen gehen :)
Lg Ansgar

Tibor Csötönyi

Antworten
Gelöschter Account
  • Forum-Beiträge: 294

03.11.2011, 22:59:17 via Website

Alles was man mit dem Browser aufrufen kann lässt sich auch automatisiert aufrufen und parsen. Google macht ja den lieben ganzen Tag auch nichts Anderes.

* Guck Dir im HTMl Quellcode der Login-Seite die Formular-Parameter an und schicke diese per HttpPost ab.

* Wenn Du alles richtig gemacht hast erhälst Du als Content den Quellcode der abgebildeten Seite. Dieser Content lässt sich natürlich ebenso parsen.

* So hangelst Du Dich durch die für Dich interessante Hierarchie dieser Site - in der Folge wohl mit HttpGet.

* So ein paar Stichpunkte: Baue Dir gleich ein Library Projekt oder ein Package für alle Klassen und Methoden rund um diese Site - ich würde das schon mal kapseln. Mach Dir für jeden Informationsgehalt eigene Klassen und Methoden. Alle Methoden werden aus der eigentlichen App dann aufgerufen - und zwar in AsyncTasks. Tags: HttpGet, HttpPost, Matcher/Parser (alternativ einen Html- oder Xml-Parser Deiner Wahl), Activities, AsyncTask, ...

Es gibt verschiedene Möglichkeiten. Hier mal ein mögliches Skelett.

Ansonsten mal etwas lernen und lesen. Ich würde auch gerne ein Auto bauen - wer kann mir helfen?


1public class Klasse {
2
3 private static final Pattern patternChecklogin = Pattern.compile(<woranErkennstDuDenErfolgDesLogins>, Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
4
5 private DefaultHttpClient client;
6 private BasicHttpContext context;
7 private BasicCookieStore store;
8
9 private String account = "";
10 private String password = "";
11
12 public Klasse(final String account, final String password) {
13 this.account = account;
14 this.password = password;
15
16 store = new BasicCookieStore();
17 context = new BasicHttpContext();
18 if (store != null && context != null) {
19 context.setAttribute(ClientContext.COOKIE_STORE, store);
20 client = new DefaultHttpClient();
21 }
22 }
23
24 public boolean login() {
25 boolean rc = false;
26
27 if (client != null) {
28 try {
29 HttpPost post = new HttpPost(<urlDerSeite>);
30 List<NameValuePair> list = new ArrayList<NameValuePair>();
31 list.add(new BasicNameValuePair(<parameterFuerDenAccount, account));
32 list.add(new BasicNameValuePair(<parameterFuerDasPasswort, password));
33 post.setEntity(new UrlEncodedFormEntity(list));
34 HttpResponse response = client.execute(post, context);
35 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
36 HttpEntity entity = response.getEntity();
37 if (entity != null) {
38 String content = EntityUtils.toString(entity, HTTP.UTF_8);
39 if (!StringUtils.isEmpty(content)) {
40 Matcher matcher = patternCheckLogin.matcher(content);
41 if (matcher.find()) {
42 rc = // was zeigt den Erfolg des Logins an?
43 }
44 }
45 }
46 }
47 } catch (Exception exception) {
48 //
49 }
50 }
51
52 return rc;
53 }
54}

— geändert am 03.11.2011, 23:20:46

Tibor Csötönyi

Antworten
Tibor Csötönyi
  • Forum-Beiträge: 4

03.11.2011, 23:09:55 via Website

Harald Wilhelm
Alles was man mit dem Browser aufrufen kann lässt sich auch automatisiert aufrufen und parsen. Google macht ja den lieben ganzen Tag auch nichts Anderes.

* Guck Dir im HTMl Quellcode der Login-Seite die Formular-Parameter an und schicke diese per HttpPost ab.

* Wenn Du alles richtig gemacht hast erhälst Du als Content den Quellcode der abgebildeten Seite. Dieser Content lässt sich natürlich ebenso parsen.

* So hangelst Du Dich durch die für Dich interessante Hierarchie dieser Site - in der Folge wohl mit HttpGet.

* So ein paar Stichpunkte: Baue Dir gleich ein Library Projekt oder ein Package für alle Klassen und Methoden rund um diese Site - ich würde das schon mal kapseln. Mach Dir für jeden Informationsgehalt eigene Klassen und Methoden. Alle Methoden werden aus der eigentlichen App dann aufgerufen - und zwar in AsyncTasks. Tags: HttpGet, HttpPost, Matcher/Parser (alternativ einen Html- oder Xml-Parser Deiner Wahl), Activities, AsyncTask, ...

Ich bedanke mich für die ausführliche Antwort! Leider habe ich (noch) keine Erfahrungen mit HTTPget und HTTPpost und ähnlichen Dingen, kurz gesagt, mit Java bin ich momentan an dem Punkt, dass ich außer einem Fakultätsberechner noch nichts groß geschafft habe :) Könntest du auf diese Dinge ein bisschen detaillierter eingehen? LG und vielen Dank!

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

04.11.2011, 09:36:47 via Website

ich glaube das hier ist nicht der richtige platz für einen java grundkurs :)

gerade zu deinen angesprochenen problemen, gibt es zig lösungen im netz zu finden. damit solltest du zurecht kommen.

swordiApps Blog - Website

Antworten