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

Reply via email to