Hello everybody,
I'm having a little problem with using threads and handlers.
I have a running activity in the main thread, where I create a worker
thread to connect to my server through sockets. To treat the returns I
am using a Handler created in main thread, and these messages should
fall back into main thread, but still in worker thread.
Could anyone help me?
Sorry for english, I'm using google translate.
x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
Error message:
Thread [<15> Thread-9] (Suspended (exception ViewRoot
$CalledFromWrongThreadException))
ViewRoot.checkThread() line: 2683
ViewRoot.invalidateChild(View, Rect) line: 570
ViewRoot.invalidateChildInParent(int[], Rect) line: 596
LinearLayout(ViewGroup).invalidateChild(View, Rect) line: 2396
TextView(View).invalidate() line: 4945
TextView.updateAfterEdit() line: 4736
TextView.handleTextChanged(CharSequence, int, int, int) line: 6158
TextView$ChangeWatcher.onTextChanged(CharSequence, int, int, int)
line: 6315
SpannableStringBuilder.sendTextChange(TextWatcher[], int, int, int)
line: 889
SpannableStringBuilder.change(boolean, int, int, CharSequence, int,
int) line: 352
SpannableStringBuilder.change(int, int, CharSequence, int, int) line:
269
SpannableStringBuilder.replace(int, int, CharSequence, int, int)
line: 432
SpannableStringBuilder.append(CharSequence, int, int) line: 259
SpannableStringBuilder.append(CharSequence, int, int) line: 28
SpannableStringBuilder(TextView).append(CharSequence, int, int) line:
2236
TextView.append(CharSequence) line: 2223
tela.logMessage(String) line: 41
String(tela$1).handleMessage(Message) line: 16
tela$1(Handler).dispatchMessage(Message) line: 99
CmaConnection.run() line: 103
Thread.run() line: 1096
x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
main thread:
public class tela extends Activity {
private Handler messageHandler = new Handler() {
public void handleMessage(Message msg) {
logMessage((String)msg.obj);
}
};
public TextView txtIn;
public Button btConn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtIn = (TextView)findViewById(R.id.txres);
btConn = (Button)findViewById(R.id.btcon);
}
public void doConnect(View view){
this.txtIn.append("Start thread...");
CmaConnection __conn = new CmaConnection("127.0.0.1", 9090,
messageHandler);
new Thread(__conn).start();
}
public void logMessage(String msg){
//////////////////////
// Bug is here //
//////////////////////
this.txtIn.append(msg);
}
}
x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x
worker thread:
public class CmaConnection extends Thread{
private Socket _conn;
private DataInputStream dIn = null;
private String _addr;
private Integer _port;
private Handler _msgHandler;
public CmaConnection(String address, Integer port, Handler
messageHandler) {
_addr = address;
_port = port;
_msgHandler = messageHandler;
}
public void run() {
try {
_conn = new Socket(_addr, _port, true);
dIn = new DataInputStream(_conn.getInputStream());
Message msg = new Message();
while(_conn.isConnected()){
msg.obj = dIn.readLine();
_msgHandler.dispatchMessage(msg);
}
_conn.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en