Textview Text wird nicht geändert

  • Antworten:4
Marius
  • Forum-Beiträge: 5

02.12.2010, 12:42:42 via Website

Hallo,

habe jetzt angefangen mit Android Entwicklung und stoße so gleich auf ein mir nicht erklärbares Problem. Ich änder in einer onClick Methode den Text von einem Textview. Aber der Text wird nicht geändert.

1@Override
2 public void onClick(View v)
3 {
4 tv.setText("Webseite wird geladen");
5 String url = "http://ptb.ceegee-page.de/navigator1.html";
6 String result = "";
7 DefaultHttpClient client = new DefaultHttpClient();
8 HttpGet method = new HttpGet(url);
9 HttpResponse res = null;
10 try
11 {
12 res = client.execute(method);
13 }
14 catch (ClientProtocolException e1)
15 {
16 // TODO Auto-generated catch block
17 Log.e("log_tag", "Error converting result "+e1.toString());
18 }
19 catch (IOException e1)
20 {
21 // TODO Auto-generated catch block
22 tv.setText("Webseite nicht erreichbar (Keine Netzwerkverbindung)");
23 Log.e("log_tag", "Error converting result "+e1.toString());
24 }
25
26 try
27 {
28 InputStream is = res.getEntity().getContent();
29 BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
30 StringBuilder sb = new StringBuilder();
31 String line = null;
32 while ((line = reader.readLine()) != null)
33 {
34 sb.append(line + "\n");
35 }
36 result = sb.toString();
37 is.close();
38 tv.setText("Webseite geladen");
39 }
40 catch(Exception e)
41 {
42 Log.e("log_tag", "Error converting result "+e.toString());
43 }
44 }

In Zeile 4 wird der text nicht geändert. Bei den beiden anderen textänderungen ( Zeile 22 und 38) klappt dies ohne Probleme.

MfG spooch

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

02.12.2010, 13:12:33 via Website

Zum einen ist deine onClick Methode riesig, was ich meine ist du erzeugst nen httpclient und einiges andere daher blockiert sie den thread der das UI updaten soll.


PS: Wenn du schon einen StringBuilder benutzt dann auch korrekt:

builder.append(line).append("\n");

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Marius
  • Forum-Beiträge: 5

02.12.2010, 14:21:44 via Website

Hallo,

das verstehe ich nicht so ganz, klar dauert das dann alles länger, aber wenn der >Client angelegt ist, geht es doch normal weiter in der Methode, das heißt er müsste es doch ändern. Habe ich da einen Denkfehler?

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

02.12.2010, 16:27:26 via Website

Hmm, sehe ich das richtig? Die drei tv.setText() stehen hintereinander und sollen sich gegenseitig überschreiben?

Das Problem ist das Du das alles in einer der onXxx() Methoden machst. Damit blockst Du das UI. Da gibt es meines Wissens eine 5 Sekunden Regel bevor Du abgeschossen wirst. Ich würde das so nicht machen.

Bevor Du die beiden try() korrekterweise in Threads auslagerst mach mal folgende kleine Gegenprobe:

Leg eine neue Methode an und pack die beiden try() Blöcke da rein. Ruf diese neue Methode aus Deinem onClick auf. Du wirst sehen das der erste Text erscheint (wenn er nicht sehr schnell überklatscht wird). Das zeigt Dir das Du Deine eigene Ausgabe blockiert hast.

Gruß
Harald

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

02.12.2010, 20:07:20 via Website

und wie immer empfehle ich an dieser stelle den einsatz eines debuggers, da kann man schön schritt für schritt durch seinen code laufen und dabei genau nachvollziehen, was passiert und was nicht...

Antworten