# Netzwerkverbindung



## e9926044 (16. Nov 2010)

Hallo,

wenn ich mich mit dem Mobile zu einem Server verbinde - etwas senden und empfangen möchte, mache ich das mit folgendem Thread


```
public class MyActivity extends Activity {
...
new Thread() {
			public void run() {
				try {
					final HttpResponse response = client.execute(httpPost);
					final HttpEntity entity = response.getEntity();
					NetworkConnectionToServer.this.is = entity.getContent();
					final InputStreamReader isr = new InputStreamReader(is);
					final BufferedReader br = new BufferedReader(isr);
					String s = ""; 
					while((s = br.readLine()) != null) {
						startActivity.setReceivedFromServer(s);
						}
					} 
				catch (final ClientProtocolException e) {
					e.printStackTrace();
					} 
				catch (final IOException e) {
					e.printStackTrace();
					}
				}
			}.start();
```

Das Problem ist jetzt mit dem empfangene String (s), dass ich diesen auf der Activity/View in einer TextView anzeigen möchte, das geht aber nicht, da man nicht von einem anderen Thread (in meinem Fall new Thread() ...) auf den Thread mit der Activity zugreifen kann.
Weiß da jemand rat, wie ich das machen könnte, einen eigenen Thread zum Senden des Strings an den Server brauch ich ja, weil sonst der Send- Button blockiert!?


----------



## e9926044 (16. Nov 2010)

Hat da jemand eine Idee dazu?
lg


----------



## mjdv (16. Nov 2010)

Jop da weiß ich was, da nimmt man zB. einen Handler

Das könnte dann so aussehen:


```
private class myHandler extends Handler {
                @Override
                public void handleMessage (Message msg) {
                        view.setText(responseStr);
                }
        }
```

Dann musste nur handler.sendEmptyMessage(MAX_PRIORITY); machen, kannst natrülich auch den response String als message senden denk ich.


----------



## Generic1 (17. Nov 2010)

Ich verschicke ja momentan meine Daten mittels:

 final HttpResponse response = client.execute(httpPost);

Meine Frage wäre jetzt noch, wo häng ich den Handler dran?
Vielen Dank,
lg


----------



## mjdv (17. Nov 2010)

Verstehe ich jetzt nicht ganz so ^^

Du machst ein Objekt von myHandler und sendest dann immer eine Message wenn du Daten hast die in der Activity angezeigt werden sollen.


----------



## Generic1 (18. Nov 2010)

mjdv hat gesagt.:


> Verstehe ich jetzt nicht ganz so ^^
> 
> Du machst ein Objekt von myHandler und sendest dann immer eine Message wenn du Daten hast die in der Activity angezeigt werden sollen.



Das versteh ich jetzt nicht ganz,
Ich mache also ein Object: 

MyHandler myHandler = new MyHandler()

und diese Instanz "myHandler" muss ich ha dann irgendwo anmelden, damit dann die Methode 

ic void handleMessage (Message msg)

aufgerufen wird, oder seh ich da was falsch?
lg


----------



## mjdv (18. Nov 2010)

Naja wie gesagt du sendest eine Message damit.

Deine Thread Funktion:

```
public void run() {
String data = getDataZ();
Bundle b = new Bundle();
b.putString("data", data);
Message m = new Message();
m.setData(b)
myHandlerObj.sendMessage(m);
}
```

Die Handler Klasse:

```
private class myHandler extends Handler {
                @Override
                public void handleMessage (Message msg) {
                        view.setText(msg.getData().getString("data"));
                }
        }
}
```

myHandlerObj muss in dem Thread erstellt werden in dem auch die view erstellt wurde.

Hoffe das ist dir jetzt ein wenig klarer.

PS: Du kannst auch sendEmptyMessage nutzen und den data String irgendwo in die Klasse setzen wo eben der Thread und die Handler Klasse drauf zu greifen kann. Ist vll. resourcenschonender, da keine Message und Bundle Objekte gemacht werden müssen.


----------



## mjdv (8. Dez 2010)

Hi Leute,

muss den Thread jetzt nochmal ausgraben 

Es gibt eine viel einfachere Möglichkeit, die UI zu aktualisieren:

Activity | Android Developers


```
this.runOnUiThread(new Runnable() {
            public void run() {
                view.setText(getData());
            }
        });
```

Hab ich vorher auch nicht gekannt sorry


----------

