Boa tarde!
Estou tendo dificuldade em desenvolver um app que recebe uma string via socket de um server, o maior problema é em deixar o android conectado com o server enquanto ele atualiza a view com a string que chega, oque eu tenho é mais ou menos isso:
package br.com.steno.legenda;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Observable;
import java.util.Observer;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.Looper;
import android.os.Process;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class LegendaMobiActivity extends Activity implements Observer{
/** Called when the activity is first created. */
Activity activity= this;
private Thread processo;
TextView textViewLegenda;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btnConfig= (Button) findViewById(R.id.button1);
Button btnConectar= (Button) findViewById(R.id.btnConectar);
textViewLegenda= (TextView) findViewById(R.id.textViewLegenda);
btnConectar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
processo= new Thread(new RecebeTextoDoServer(LegendaMobiActivity.this));
processo.start();
}
});
}
@Override
public void update(Observable observable, Object data) {
// TODO Auto-generated method stub
}
private class RecebeTextoDoServer extends Observable
implements Runnable {
public RecebeTextoDoServer(Observer observer){
addObserver(observer);
}
@Override
public void run() {
// TODO Auto-generated method stub
Socket s = null;
BufferedReader entrada=null;
try{
s = new Socket("192.168.1.118", 7000);
entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
textViewLegenda.setText(entrada.readLine());
Log.e("Msg", entrada.readLine());
}
}catch(IOException e){
Log.e("Erro", "Ops! A conexão não foi aceita.");
}finally{
try{
s.close();
}catch(IOException e){}
}
notifyObservers(true);
setChanged();
}
}
}
Com esse codigo eu consigo a conexão com o server, mais quando o server envia uma msg ele joga uma:
Only the original thread that created a view hierarchy can touch its views.
Nesse caso como eu deveria proceder?
Eu deixo a parte de conexão e recebimento de texto em uma thread separada, pois se eu não faço isso ele “amarra” a app.
Desde ja agradeço.
Arthur dos Santos