[App] Eigener Stundenplaner

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

28.02.2013, 15:41:29 via Website

Hi an euch alle :)
Ich heiße Patric und versuche mich gerade daran mir für unsere Uni eine App zu erstellen, die mir meinen Stundenplan darstellt.
Programmierfähigkeiten hab ich hauptsächlich mit C++ und einige Grunderfahrung in Java.
Was ich mir bisher zur App überlegt habe:
Ich möchte die Informationen (also Datum, Uhrzeit, Vorlesungsname) von der Seite parsen( muss natürlich vorher eingelogt sein) und diese dann in einer XML-Datei speichern.
Diese Datei will ich dann wieder auslesen und die Informationen dann in einem passenden Layout darstellen.
Was bisher Fragen aufwirft:
Wie realisiere ich das am besten mit dem Login auf unserer Uni-Seite?
Ist es besser(einfacher) die Informationen zu parsen oder sie mit Hilfe von regular Expressions auszulesen?
Wie erstelle ich am besten so eine XML-Datei?

Bin ich mit diesen Überlegungen auf dem richtigen Weg oder befinde ich mich da total auf dem Holzweg?

— geändert am 28.02.2013, 15:42:18

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.02.2013, 18:02:29 via Website

1. Also den Login musst du schauen, weis ja net welche Uni Seite du meinst. Ich weiß, wie man so nen Login auf externen Seiten macht. Poste am besten mal die Url.

2. Die Seite Parsen kannst du immer, im HTML Quellcode musst du dann halt nach bestimmten Schlüsselworten suchen.
Mit Regular Expressions habe ich keine ahnung.

3. Am besten du versuchst erst einmal die Daten zu holen und zu Parsen. Wozu brauchst du denn die XML doch nur zum Speichern oder?
Das kannst aber musst du nicht mit einer XML Datei machen. Zummanderen ist das ERstellen einer XML aufüandig.
Bei Frgen stelle sie einfach hier.

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

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

04.03.2013, 10:18:47 via Website

Erst mal Danke für deine Hilfe :)
Ja die XML-Datei wäre nur zum Speichern der Daten gewesen.
Was wäre den eine gute Alternative anstatt der XML-Datei?
Noch eine andere Frage:
Der Login funktioniert wie üblich über Benutzername und Passwort, nur soll die der User nicht jedesmal eingeben müssen,
sondern sie sollen beim Start der App schon in den Textfeldern stehen. Wie könnte ich das am besten regeln?

— geändert am 04.03.2013, 10:22:35

Antworten
Christian
  • Forum-Beiträge: 307

04.03.2013, 11:13:40 via Website

Hi Patric,


Was wäre den eine gute Alternative anstatt der XML-Datei?
Wie wär es mit na Datenbank?
Eine Übersicht der "Speichermöglichkeiten": Storage Options


Der Login funktioniert wie üblich über Benutzername und Passwort, nur soll die der User nicht jedesmal eingeben müssen,
sondern sie sollen beim Start der App schon in den Textfeldern stehen. Wie könnte ich das am besten regeln?
Na beim ersten Start speicherst du die Eingabe und bei jedem weiteren Start lädst du sie aus dem Speicher und schreibst die Daten in die Textfelder.

Mfg Christian

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.03.2013, 13:27:54 via App

Du kannst ein HTTP Post mit den Login Daten machen. Zum speichern von Daten kannst du SharedPreference benutzen.

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

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

06.03.2013, 10:06:03 via Website

Danke das mit den Shared Preferences ist genau das was ich gesucht hab :)

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

07.03.2013, 15:08:10 via Website

Mir hat sich mal wieder eine neue Frage aufgetan bei der ich eure Hilfe gebrauchen kann.
Das mit den sharedpreferences und mit dem Login hab ich denke ich soweit erledigt.
Was ich mich frage, bzw nicht weiß wie ich es realisieren könnte ist folgendes:
Ich versuche es mal zu beschreiben.
Nachdem man sich auf der Seite unserer Uni eingeloggt hat, wählt man im Menü einen Punkt(Link) aus, worauf man eine Liste der anstehenden
Termine(also die Vorlesungen) erhält. Diese möchte ich dann parsen.

Wie könnte ich es in meiner App realisieren, dass, nachdem ich den Button zum Senden der Login-Daten gedrückt habe, mir der zweite Link, unter dem die Vorlesungen stehen, ausgewählt wird und ich die Infos parsen kann. Bzw. wie mache es, das dies alles im Hintergrund abläuft?
Was ich mir vorgestellt hatte ist, dass ich einfach auf den Button klicke, im Hintergrund alles abläuft und mir dann in einer Zweiten Activity der fertige Stundenplan angezeigt wird. Kann das so funktionieren oder gehe ich das falsch an?

Antworten
impjor
  • Forum-Beiträge: 1.793

07.03.2013, 15:17:41 via App

Ich denke mal, du hast einen separaten Thread, der dich in die Uni-Seite eingeloggt, da es sonst eine NetworkOnMainThreadException gibt. Also mache es so, das in diesen Thread nach dem Login der zweite link aufgerufen wird.

Am besten solltest du den Stundenplan nicht als HTML, sondern als JSON ausgegeben. Dann müsstest du aber auf dem Uni-Server eine neue PHP- Seite anlegen.

Gruß

— geändert am 07.03.2013, 15:20:17

Liebe Grüße impjor.

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

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.03.2013, 18:44:29 via Website

Du musst die URL prüfen,ob auf "Links" gedrückt wurde.
Dann die HTML einlesen und den Inhalt Schritt für Schritt parsen.
Um das ganze im Hintergrund laufen zu lassen nutzt du einen extra Thread.

PS: Wie machst du das mit dem Login - würdem ich mal interessieren.

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

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

08.03.2013, 20:59:06 via Website

@Imjor: Danke für den Tipp. Die Sache ist allerdings das ich am Uniserver keine neue PHP-Seite anlegen kann ,da ich dazu keine Berechtigung habe. Ich muss die Daten aus dem HMTL-Code parsen :(
@Pascal: Da bin ich mir noch nicht so ganz sicher. Was ich mir überlegt habe, das ich in den Link zum Einloggen meinen Benutzernamen und dass Passwort einsetze und den Link dann aufrufe. Danach dann das Parsen von der Seite

— geändert am 08.03.2013, 21:03:53

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.03.2013, 21:54:10 via Website

Ich würde dir immer noch den Weg per HTTP Post empfelen.
Dann denkt die Seite,du hättest dich normal im Web Browser angemeldet.

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

Antworten
impjor
  • Forum-Beiträge: 1.793

08.03.2013, 22:15:03 via App

Würde ich auch so machen. Außerdem solltest du dich nach Xml parsern umschauen, HTML ja in gewisser Weise XML ist.

Gruß

Liebe Grüße impjor.

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

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.03.2013, 22:20:43 via Website

Habe auch schon in Java eine HTML geparst, aber nicht mit einem XML parser (warscheinlich die einfachste Lösung)
sondern ich habe die HTML Seite eingelesen und dann immer nach bestimmten Schlüsselwörtern gesucht. Duch einen Substring kommt man dann auch schnell zum Ziel.
Aber würde einen XML Parser empfelen, obwohl der Code dafür am Anfang noch nict leicht zu verstehen ist. (war bei mir jedenfalls so.)

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

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

13.03.2013, 13:44:15 via Website

So mal wieder Vielen Dank für eure Tipps.
Ich hab jetzt einfach mal versucht den Link in einem WebView zu öffnen, nur funktioniert das nicht.
Es erscheint die Fehlermeldeung "Web page not available".
Kann das was mit dem "https" zu tun haben?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.03.2013, 15:37:41 via Website

Kann das vlt. daran liegen, dass sich die URL ständig ändert, oder dass du in der WebView nicht angemeldet bist?
HTTPs hat normalerweise nichts damit zu tun.

— geändert am 14.03.2013, 15:38:15

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

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

19.03.2013, 17:57:29 via Website

Also wenn ich den Link mit Firefox auf meinem Rechner öffne wird mir die Seite direkt angezeigt.
Wie meinst du das, dass ich nicht im WebView angemeldet bin?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.03.2013, 20:57:40 via App

Das liegt vlt. daran, dass du im Firefox schon auf der Seite automatisch schon angemeldet bist.
Versuch es mal mit nem anderen Browser, aber du darfst davor dich nicht anmelden.
Wenn dann die gleiche Fehlermeldung kommt, dann heißt das, dass der WebBrowser in deiner App keine Cookies oder Sessions speichert.

Edit: Mit nicht in der WebView angemeldet meine ich,dass du den Authentifizierungsvorgang auf der Webseite nicht ordnungsgemäß ausgeführt hast.

— geändert am 19.03.2013, 21:00:01

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

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

25.03.2013, 14:22:33 via Website

So das Problem hat sich erledigt, ich weiß nicht was ich gemacht habe, aber über den WebView kann ich mich jetzt auf der Seite anmelden.
Sprich mein Link funktioniert :)
Lediglich beim Aufruf des Links bekomme ich die Fehlermeldung, dass das Zertifikat abgelaufen sei, aber das sollte mich ja nicht stören, da ich den WebView ja nur zum Teste des Links benutzt habe. Der eigentliche Aufruf erfolgt ja im Hintergrund.
Nur wie bekomm ich das jetzt hin, nachdem ich mich erfolgreich eingeloggt habe, das dann der 2 link automatisch aufgerufen wird, unter dem ich die Liste der Veranstaltungen finde? Mir wird das einfach nich klar, hat da vll jmd ein kleines Codebespiel?
Bzw. wie kann ich das Prüfen das der Login erfolgreich war?

— geändert am 25.03.2013, 14:56:14

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.03.2013, 14:42:52 via App

Das kommt ganz darauf an, wie du deinen Login machst. Bitte poste mal den Code sonst kann ich dir nicht genau sagen, wie du das machen kannst.

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

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

25.03.2013, 15:06:49 via Website

Bin mir da noch nicht so sicher, bisher hab ich einfach den Link dem WebView übergeben um zu sehen ob er funktioniert

Hier mal der Link:
"http s://office.kis.uni-kl.de/views/pia/pia.asp?size=1680&u="+benutzername+"&p="+passwort+"&login=%3E+Login"

und so hab ich mich bisher mit dem View "geprüft" ob der Link funktionert:
Uri uri = Uri.parse(link);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.03.2013, 15:18:10 via Website

Ok, also du gibst die URL in deine App ein und meiner Meinung nach wird dann ein externer Webrowser geöffnet, der dich dein auf der Uniseite einloggt.
Warscheinlich musst du angemeldet sein, um deinen Stundenplan auslesen zu können.
Dann musst du das ganze mit einer WebView machen, denn anders wüden die Sessiondaten nicht erhaltenbleiben.
Oder kannst du dich auf einer Belibigen Unterseite einloggen:
zb. so:
http s://office.kis.uni-kl.de/views/pia/stundenplan.aspx?parameter die du zum Login benötigst

Wenn das mit dem Link (musst du noch auf die richtige seite abändern) funktioniert dann kannst du das Problem ohne WebView lösen.

— geändert am 25.03.2013, 15:18:34

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

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

25.03.2013, 15:21:58 via Website

Also um mir die Vorlesungen anzeigen zu lassen muss ich angemeldet sein

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.03.2013, 15:28:56 via Website

Ok dann schau dir mal das an:
http://www.maxters.net/2012/02/android-webview-get-html-source/
Du musst nur noch davor in der WebView die Login URL aufrufen und dann die Stundenplan url aufrufen.

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

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

25.03.2013, 15:37:54 via Website

Aber wie mach ich das mit dem Aufrufen der Stundenplan URL, da soll ja alles im Hintergrund passieren, ohne das ich in der WebView etwas anklicke?!
Der Nutzer soll einfach nur seine Daten eingeben und ein paar Sekunden später soll ihm in einer neuen Activity der Stundenplan angezeigt werden

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.03.2013, 15:42:32 via Website

Sorry, das habe ich vergessen,du brauchst etwas, dass dich in auf der Seite anmeldet und dann die Anmeldesession auf die Stundenplanseite übernimmt.

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

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

03.04.2013, 09:09:50 via Website

Sry, das ich mich jetzt erst melde, war paar Tage leider krank :(
Das mti dem Login hab ich leider immernoch nicht hinbekommen. Hab mir jetzt den Quelltext der Seite auf nen Server gezogen um zumindest mal soweit voran zu kommen, dass ich mir die gewünschten Daten auslesen kann. Klappt soweit auch ganz gut. Lade mir den Quelltext der Seite herunter und speichere ihn in einem String. Jetzt ist nur meine Frage wie ich am besten an die Daten komme, die ich aus dem String brauche?
Hier mal ein kleiner Auszug aus dem String:

<a href="appDispatcher.asp?viewonly=False&back=APPOINTMENTLIST&guid=0x919F608DE8F2AA45AF9FC1BAD6E3FDA5&body=False">H&#246;here Mathematik f&#252;r Bauingenieure II </a></td><td nowrap>&nbsp;Mo. 16.04.2012 08:15 </td>
<td nowrap>&nbsp;Mo. 16.04.2012 09:45

</td><td nowrap>&nbsp;</td></tr><tr class="even"><td width="20"><a href="JavaScript:markRecord(1);"><img name="mark1" src="../../system/utils/img/ioDots/ioUnmarked.gif" width="19" height="15"
border="0" alt="Diesen Termin markieren"></a></td><td nowrap><a href="appointmentList.asp?viewonly=False&back=APPOINTMENTLIST&visibleper=true&periodguid=0x28417E996D098646BEE3D1947021CA7C&body=False"><img src="../../system/utils/
img/ioDots/periodPlus.gif" border="0" alt="Termin einer Serie"></a>&nbsp;

Die Daten die ich benötige habe ich fett markiert. Nur wie durchlaufe ich jetzt den String am besten so, dass ich an die fett markierten Informationen dran komme?

— geändert am 03.04.2013, 09:10:20

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.04.2013, 10:46:41 via Website

Solange die Struktur der HTML sich nicht ändert, müsstest du das auch parsen können.

1String suche = "&body=False\">";
2
3 int pos = html.IndexOf(suche) + suche.length();
4 String zwischenschritt = html.substring(pos);
5suche = "</td><td nowrap>";
6 pos = zwischenschritt.IndexOf(suche) + suche.length();
7 String gewünschteDaten= zwischenschritt.substring(0,pos);
So ist es zimlich umständlich.Aber es funktioniert.

Hier auf dieser Seite sind noch ein Paar html Parser aufgelistet:
http://stackoverflow.com/questions/1433250/possible-to-parse-a-html-document-and-build-a-dom-treejava

PS: Ich würde dir mit dem Login gerne helfen :)

— geändert am 03.04.2013, 10:47:36

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

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

03.04.2013, 16:42:56 via Website

Zum Login:

1String benutzername = "AndroidPit";
2 String passwort = "android";
3 HttpClient client = new DefaultHttpClient(); // Http CLient anlegen
4
5 HttpGet httpget = new HttpGet("https://office.kis.uni-kl.de/views/pia/pia.asp?size=1680&u="+benutzername+"&p="+passwort+"&login=%3E+Login");
6
7 try {
8
9 HttpResponse response = client.execute(httpget);
10
11 BufferedReader rd = new BufferedReader
12 (new InputStreamReader(response.getEntity().getContent()));
13
14 String line = "";
15 String out = null;
16 while ((line = rd.readLine()) != null) {
17 out += line;
18 }
19 //String out ist die HTML der Anmeldepage
20
21
22 } catch (Exception e) {
23 // TODO Auto-generated catch block
24 e.printStackTrace();
25 }
26
27
28 HttpGet request = new HttpGet("urlToStundenplan");
29
30 try {
31 HttpResponse response = client.execute(request);
32 BufferedReader rd = new BufferedReader
33 (new InputStreamReader(response.getEntity().getContent()));
34
35 String line = "";
36 String out = null;
37 while ((line = rd.readLine()) != null) {
38 out += line;
39 }
40
41 HTMlParse(out); //Die ausgabe wird in einer externen Funktion geparst.
42 } catch (ClientProtocolException e) {
43 // TODO Auto-generated catch block
44 e.printStackTrace();
45 } catch (IOException e) {
46 // TODO Auto-generated catch block
47 e.printStackTrace();
48 }

Pass aber auf nicht im Ui Thread machen, sonst gibt es eine NetworkOnMain exception.
Am besten in einm Externet Thread oder AsyncTask laufen lassen.

Ich habe diesen Coden bei meiner Homepage getestet und er functioniert.

Hoffe ich konnte dir Helfen

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

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

04.04.2013, 09:15:25 via Website

Wow, vielen Dank :)
Ich hab jetzt versucht den Code in einer eigenen Activty zu starten, was leider dazu führt das mir die App abstürzt.
Kannst du mir erklären wie ich den Code in einen Asynctask einbaue. Ich hab es bisher so versucht, hab deinen Code in "gethml()" geschrieben:
1public void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3 setContentView(R.secondmain);
4@Override
5 protected Void doInBackground(Void... params) {
6 gethtml();
7 return null;
8 }
9}.execute();
10}

Aber es stürzt mir immer ab?!

Antworten
impjor
  • Forum-Beiträge: 1.793

04.04.2013, 10:10:00 via Website

Du brauchst eine eigene Klasse, die du von AsyncTask erben lässt. (
1public class MeinAT extends AsyncTask<Void, Void, Void> { ... }
)
Da machst du die doInBackgroundMethode rein ([code]
1public Void doInBackground(Void... params) {
2 [Code von Pascal P.]
3}
).
In der MainActivity startest du den AsyncTask, um die einzuloggen.
1//Einloggen
2AsyncTask login = new MeinAT();
3login.execute(new Void[0]);

Gruß

Liebe Grüße impjor.

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

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

04.04.2013, 10:41:52 via Website

Dankeschön!
Sieht ja nach deiner Beschreibung recht einfach aus :)
Werd es gleich mal testen

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

04.04.2013, 12:35:27 via Website

Eine Frage hätte ich noch an euch.
Und zwar hab ich ja den Inhalt der Seite in einem String gespeichert, aus dem ich den Inhalt zwischen den Tags benötige.
Diesen Inhalt will ich in einer XMl-Datei speichern und später wieder laden um daraus dann den Stundenplan darzustellen.
Jetzt habe ich von Html-Parsern gelesen und frage mich ob es nicht die Möglichkeit gibt, darüber an den Inhalt der Tags zu kommen und sie dann in der XML zu speichern und später wieder auszulesen. Ich weiß jetzt nicht ob ich das deutlich genug beschrieben habe. Mir stellt sich halt nur die Frage ob es nicht umständlich ist, den Inhalt zwischen den Tags zum Beispiel erst zu RegExen und dann so in eine XML-Datei zu speichern?

Antworten
impjor
  • Forum-Beiträge: 1.793

04.04.2013, 12:46:18 via Website

HTMLParser sollten eine bessere Alternative darstellen, als Regular Expression, sofern sie denn funktionieren. XML ist eine gute Idee, um den Stundenplan offline anzusehen, bei der Datenmenge, denke ich ist das einfacher als eine Datenbank.
Gruß

Liebe Grüße impjor.

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

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

04.04.2013, 13:49:14 via Website

Hast du eine Empfehlung welcher Parser da am geeignetsen wäre oder ist das im Grunde egal?

— geändert am 04.04.2013, 14:22:06

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.04.2013, 09:09:53 via App

Es ist egal welchen du jetzt nimmst.
Die einen können halt mehr als die anderen.

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

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

06.04.2013, 11:56:28 via Website

Nochmal danke für deinen Code :)
Dazu hätte ich noch eine Frage. Ich hab den Code ja jetzt in dem Asyntask. Nur wie bekomm ich den jetzt in meine MainActivity um den zum Beispiel
in einem TextView anzuzeigen?

Bzw. was mache ich falsch das mir die App immernoch um die Ohren fliegt?
Ich hab in meiner MainActivity einfach nur einen Button mit folgenden Code:
1AsyncTask login = new Seitenparser();
2 login.execute();

In meiner ZweitActivity steht:
1public class Seitenparser extends AsyncTask<String, Void, String> {
2
3
4
5 protected String doInBackground(String... params) {
6 // TODO Auto-generated method stub
7
8
9 String string="";
10 String benutzername = "username";
11 String passwort = "123455";
12 HttpClient client = new DefaultHttpClient(); // Http CLient anlegen
13
14 HttpGet httpget = new HttpGet("https://office.kis.uni-kl.de/views/pia/pia.asp?size=1680&u="+benutzername+"&p="+passwort+"&login=%3E+Login");
15
16 try {
17
18 HttpResponse response = client.execute(httpget);
19
20 BufferedReader rd = new BufferedReader
21 (new InputStreamReader(response.getEntity().getContent()));
22
23 String line = "";
24 String out = null;
25 while ((line = rd.readLine()) != null) {
26 out += line;
27 }
28 //String out ist die HTML der Anmeldepage
29
30
31 } catch (Exception e) {
32 // TODO Auto-generated catch block
33 e.printStackTrace();
34 }
35
36
37 HttpGet request = new HttpGet("urlToStundenplan");
38
39 try {
40 HttpResponse response = client.execute(request);
41 BufferedReader rd = new BufferedReader
42 (new InputStreamReader(response.getEntity().getContent()));
43
44 String line = "";
45 String out = null;
46 while ((line = rd.readLine()) != null) {
47 out += line;
48 }
49 string = out;
50 //HTMlParse(out); //Die ausgabe wird in einer externen Funktion geparst.
51 } catch (ClientProtocolException e) {
52 // TODO Auto-generated catch block
53 e.printStackTrace();
54 } catch (IOException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58
59 return string;
60 }
61
62
63}

— geändert am 06.04.2013, 12:47:40

Antworten
impjor
  • Forum-Beiträge: 1.793

06.04.2013, 13:39:18 via App

Was sagt den das Logcat?
Bzw. über die Funktion publishProcess() in doInBackground kannst du die Methode onProgressUpdate im AsyncTask aufrufen. Diese ist dann Thread-Sicher und kann z.B. DeineMainActivity.eineMethode() aufrufen.

Gruß

Ps noch ein Bsp:
public class AT extends AsyncTask<Void, String, Void>
...
doInBackground(Void... p) {
...
publishProcess(htmlText);
}

void onProgtessUpdate(String... p) {
mActivity.methode(p[0]);
}

public AT(MainActivity a) {
this.mActivity = a;

— geändert am 06.04.2013, 13:43:14

Liebe Grüße impjor.

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

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.04.2013, 13:40:40 via Website

Der AsyncTask übergibt deinen String in die Funktion onPostExcute(String result).
Dort machst du dann:
1@Override
2 protected void onPostExecute(String result) {
3 TextView txt = (TextView) findViewById(R.id.output);
4 txt.setText(result); //Der String wird in die TextView gesetzt.
5 }
Hoffe das hilft, hatte nämlich auch schon Probleme damit.

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

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

06.04.2013, 17:02:16 via Website

Log-Cat gibt mir folgendes zurück:

04-06 14:58:24.768: E/AndroidRuntime(370): FATAL EXCEPTION: Thread-10
04-06 14:58:24.768: E/AndroidRuntime(370): java.lang.IllegalArgumentException: Illegal character in query at index 74: https://office.kis.uni-kl.de/views/pia/pia.asp?size=1680&u=test&p=1234&login=%3E+Login
04-06 14:58:24.768: E/AndroidRuntime(370): at java.net.URI.create(URI.java:776)
04-06 14:58:24.768: E/AndroidRuntime(370): at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
04-06 14:58:24.768: E/AndroidRuntime(370): at com.example.test.MainActivity.doRequest(MainActivity.java:412)
04-06 14:58:24.768: E/AndroidRuntime(370): at com.example.test.MainActivity.initview(MainActivity.java:368)
04-06 14:58:24.768: E/AndroidRuntime(370): at com.example.test.MainActivity.run(MainActivity.java:354)
04-06 14:58:24.768: E/AndroidRuntime(370): at java.lang.Thread.run(Thread.java:1019)
04-06 14:58:27.286: E/WindowManager(370): Activity com.example.test.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405243d8 that was originally added here
04-06 14:58:27.286: E/WindowManager(370): android.view.WindowLeaked: Activity com.example.test.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405243d8 that was originally added here
04-06 14:58:27.286: E/WindowManager(370): at android.view.ViewRoot.<init>(ViewRoot.java:258)
04-06 14:58:27.286: E/WindowManager(370): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
04-06 14:58:27.286: E/WindowManager(370): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
04-06 14:58:27.286: E/WindowManager(370): at android.view.Window$LocalWindowManager.addView(Window.java:424)
04-06 14:58:27.286: E/WindowManager(370): at android.app.Dialog.show(Dialog.java:241)
04-06 14:58:27.286: E/WindowManager(370): at com.example.test.MainActivity.initthread(MainActivity.java:348)
04-06 14:58:27.286: E/WindowManager(370): at com.example.test.MainActivity.onCreate(MainActivity.java:245)
04-06 14:58:27.286: E/WindowManager(370): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-06 14:58:27.286: E/WindowManager(370): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-06 14:58:27.286: E/WindowManager(370): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-06 14:58:27.286: E/WindowManager(370): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-06 14:58:27.286: E/WindowManager(370): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-06 14:58:27.286: E/WindowManager(370): at android.os.Handler.dispatchMessage(Handler.java:99)
04-06 14:58:27.286: E/WindowManager(370): at android.os.Looper.loop(Looper.java:123)
04-06 14:58:27.286: E/WindowManager(370): at android.app.ActivityThread.main(ActivityThread.java:3683)
04-06 14:58:27.286: E/WindowManager(370): at java.lang.reflect.Method.invokeNative(Native Method)
04-06 14:58:27.286: E/WindowManager(370): at java.lang.reflect.Method.invoke(Method.java:507)
04-06 14:58:27.286: E/WindowManager(370): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-06 14:58:27.286: E/WindowManager(370): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-06 14:58:27.286: E/WindowManager(370): at dalvik.system.NativeStart.main(Native Method)

Ich kann damit leider bisher rein gar nichts anfangen :(
Ok, anscheinend hat es was mit meinem Link zu tun?! Nur wenn ich den ganz normal im Browser ausführe funktionert er :mad:

— geändert am 06.04.2013, 17:06:26

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.04.2013, 17:31:43 via App

Ich werde es später nochmal testen.

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

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.04.2013, 17:45:27 via Website

Du hattest recht der HTTP Client kann von sich aus kein https.
Versuch es mal, indem du bei den URLs die https durch http ersetzt. (ist halt eine nicht sichere Passwortübertragung)
Oder du versuchst es so:
http://stackoverflow.com/questions/2603691/android-httpclient-and-https

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

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

06.04.2013, 18:00:17 via Website

Also mit http funktionert es problemlos, auch wenn ich "https://www.google.de/ " benutze, funktioniert zumindest das laden des Quelltextes von dort

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.04.2013, 18:07:33 via Website

Komisch aber gut, dass es nun Funktioniert :)

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

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

06.04.2013, 18:40:53 via Website

Muss jetzt halt mal noch schaun das es auch mit dem Login funktioniert :)

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

07.04.2013, 10:57:50 via Website

Eine vll eher allgemeinere Frage an euch.
Ich hab folgendes Problem, also meine App läuft wunderbar im Emulator. Wenn ich jetzt meinen PC auschalte und paar Minuten später wieder die App testen will, bekomme ich eine FATAL EXPEPTION ?!
Woran kann das liegen?

— geändert am 07.04.2013, 10:58:21

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.04.2013, 12:29:10 via Website

Also verstehe ich das richtig, im Emulator tut die App und auf deinem Handy nicht?
Hast du mal die Build Api überprüft, und geschaut welche Firmware dein Handy hat?
Sind noch irgendwelche Abhängigkeiten vom Betriebsystem in der App?
Poste bitte mal den Log von LogCat.
Vielleicht liegt es daran.

— geändert am 07.04.2013, 12:30:42

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

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

07.04.2013, 14:42:19 via Website

Da hast du mich gerade falsch verstanden. Ich teste die App momentan nur aufm PC,da mein Handy den Geist aufgegeben hat.
Die Sache ist das wenn ich die App im AVD laufen lassen funktioniert sie. Schalte ich jetzt den PC aus, und mache ich sagen wir ne Stunde später wieder an und teste die App, dann stürzt sie mir ab?!

Antworten