Serververbindung failed

D

Didi95

Neues Mitglied
0
Hi Leute,
ich programmiere gerade für unsere Schule eine App, die nachher den vertretungsplan anzeigt. Nun habe ich bislang versucht die Verbindung zum Server herzustellen, sodass er schonmal Zugriff auf die Daten der Datenbank hat. Ich bekomme nun allerdings 3 Fehlermeldungen die ich nicht so recht zu interpretieren weiß.
Die erste( und wie ich vermute die wichtigste) lautet:
Fehler bei der http Verbindung android.os.NetworkonMainThreadException

Kann es sein dass ich mit der Verbindung zu der Datenbank das Netzwerk blockiere? Ich habe sowas schon gelesen allerdings steht dort dass die app dann abstürzen würde, was meine nicht tut. Wäre cool wenn mir da jemand helfen kann. Falls es hilft hier der code:
Code:
public void getData() {
		String result = "";	
		ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
		try{
				 HttpClient httpclient = new DefaultHttpClient();
				 HttpPost httppost = new HttpPost("http://yourcloud.eichsfeld-gymnasium.de.de/app_neu/Verbindung.php");
				 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
				 HttpResponse response = httpclient.execute(httppost);
				 HttpEntity entity = response.getEntity();
				 is = entity.getContent();
			 }catch(Exception e){
				 Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
				 }

Danke euch
Didi95
 
Lies mal meinen gepinnten thread über häufige fehler bei der programmierung durch.

Der fehler ist so häufig, dass die leute hier schon etwas aggressiv reagieren: D

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
Oh danke :D
es tut mir leid wenn ich damit nerve. Ich bin nur kein profi was Java angeht :D und asynctasks finde ich ziemlich kompliziert :/

Der ursprüngliche Beitrag von 20:10 Uhr wurde um 20:20 Uhr ergänzt:

Aber eine Frage habe ich:
Asynctask ersetzt mir nicht die httpverbindung zum server sondern lädt im Grunde nur die Daten vom Server vor um sie dann an die App zu "übergeben". Sehe ich das richtig?
 
Nein, AsyncTask ist nur eine Auslagerung der Verbindung als eigener Prozess (Multithreading). Normalerweise werden Prozesse ja zeilenweise abgearbeitet und nur wenn grad nix gemacht wird, kann der Nutzer was anklicken. Wenn jedch eine Programmzeile (Internetverbindung) länger dauert, dann reagiert der Prozess eben so lange nicht, bis der Programmcode abgearbeitet ist. AsyncTask ist eben die Lösung, dass die Internetverbindung in einem eigenem Prozess aufgebaut wird und dadurch das Ganze nicht im Prozess der Benutzeroberfläche der App stattfindet, was zu einem ANR führen könnte.

Und mich nervt dies nicht, aber andere waren schon des öfteren genervt. Fragen ist ja nicht verboten, dazu ist das Forum ja da!

Und AsyncTask sind eigentlich sehr einfach. Du tust einfach innerhalb der Klassendefinition (am besten vor der letzten geschweiften Klammer) folgendes:

PHP:
private class rsstask extends AsyncTask{
//..
}

Dann hast du innerhalb der AsyncTask Klasse mehrere Methoden:

PHP:
protected String doInBackground(String... arg0) {
return String
}

Da kopierst du einfach deinen Code rein, der die Internetverbindung beinhaltet. Alles was hier drinne ausgeführt wird, wird im Hintergrund, also im eigenen Prozess ausgeführt.

Dann gibts noch die Methode:

PHP:
protected void onPostExecute(String result){

}

Hier kannst du dann erst auf die Userinterface Elemente zugreifen (TextViews usw.). Nicht in DoinBakcground auf UI-Elemente zugreifen. onPostExecute wird ausgeführt, NACHDEM doInBackground komplett durchgelaufen ist (in deinem Fall wenn alle Daten geladen sind.

Aufrufen also starten tust du die Asynctask mit folgender Zeile:
PHP:
new rsstask().execute();  //AsyncTask starten

Du erzeugst eien neue AsyncTask und führst diese aus.


Wenn du dir noch einige Tutorials ansiehst wirst du noch weitere Methoden finden, aber das sind die wichtigsten.

Ich hoffe ich konnte dir helfen, bei weiteren fragen -->Google oder hier fragen.

Gruß


Edit: also ja im prinip hast du recht. Und einen absturz würdest du griegen nur dein catch teil fängt es.

P.S. sei froh dass eure schule wenigstens einen online vertretungsplan hat, wir haben keinen.
 
Zuletzt bearbeitet:
Ah okay. Danke für die erklärung! :)
Das hat mir schonmal geholfen. Wäre es okay für dich wenn ich nachher den code hier mal komplett reinposte wenn ich das fertig in den async integriert habe? Dann kannst du mich vielleicht auf eventuelle fehler hinweisen und mir dient es zur besseren verständnis ;)
Ichbhate bislang noch nicht wirklich mit java zu tun,dass wird meine erste app. Komme eigentlich mehr aus der webdesigner ecke.
Aber danke schonmal für alles! :)

P.s. Untis sei dank haben wir das ja. Allerdings mussten wir ziemlich viel selbst umbasteln um es anzeigbar zu machen. Und untis ist nicht gerade programmiererfreundlich :D php parserbibliothek und alles mussten wir schreiben damit das lief. ;)


Gesendet von meinem GT-N7000 mit der Android-Hilfe.de App
 
Kannst du machen wenn du willst. Du kannst ihn mir aber auch als pm schicken, deine entscheidung

Gesendet von meinem GT-S5660 mit der Android-Hilfe.de App
 
Kriegst ihn als pm.


Gesendet von meinem GT-N7000 mit der Android-Hilfe.de App
 

Ähnliche Themen

A
Antworten
5
Aufrufe
974
jogimuc
J
R
Antworten
23
Aufrufe
2.979
RealNiclas
R
I
Antworten
1
Aufrufe
1.742
Ishgalad
I
Zurück
Oben Unten