Comunicação via socket

Fala galera do GUJ,

Estou desenvolvendo uma aplicação em android que funciona assim:

Tera um servidor, nesse servidor ira se conectar uma pessoa(escritor) ele enviara textos para o servidor e esse servidor ira despachar os textos para quem estiver conectado.

O problema é:
Quando o usuario se conecta, a tela dele precisara ser atualizada assim que o escritor enviar uma frase para o server, eu ja consegui fazer quase tudo o problema é que quando o escritor envia algo é lançada uma :


09-23 17:21:21.990: ERROR/AndroidRuntime(377): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.view.ViewRoot.invalidateChild(ViewRoot.java:607)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.view.View.invalidate(View.java:5115)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.TextView.invalidateCursor(TextView.java:3625)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.TextView.spanChange(TextView.java:6221)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.TextView$ChangeWatcher.onSpanAdded(TextView.java:6346)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.text.SpannableStringBuilder.sendSpanAdded(SpannableStringBuilder.java:906)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:611)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:514)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.text.Selection.setSelection(Selection.java:74)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.text.Selection.setSelection(Selection.java:85)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.text.method.ArrowKeyMovementMethod.initialize(ArrowKeyMovementMethod.java:497)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.TextView.setText(TextView.java:2676)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.TextView.setText(TextView.java:2556)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.EditText.setText(EditText.java:75)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at android.widget.TextView.setText(TextView.java:2531)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at br.com.steno.TVTextoActivity$1.run(TVTextoActivity.java:27)
09-23 17:21:21.990: ERROR/AndroidRuntime(377):     at java.lang.Thread.run(Thread.java:1096)

É lançado isso pois a Thread que esta tentando atualizar a tela não foi a principal da aplicação android, deu pra entender?

Tem como permitir que outras threads possam “mecher” na View da aplicação ?

[]'s

Você deve utilizar HANDLER’s para atualizar a VIEW da aplicação, acho que se for só isto que falta, vai ser moleza! :slight_smile:

Da uma sacada -> http://developer.android.com/reference/android/os/Handler.html

Gostei da sua aplicação, achei bastante interessante!!! =)
Um dia tentarei faze-la também…

Abraço,

Fala felipe

Eu consegui fazer cara ficou assim:

[code]
Thread runner= new Thread(new Runnable() {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		hdlr.sendEmptyMessage(0);

	}
});

private Handler hdlr= new Handler(){
	@Override
	public void handleMessage(Message message) {
                   //client é uma classe minha.
		msg.setText(client.getTimeline().replace("<br>", ""));
	}

};[/code]