Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Thread modify EditText

I am having a problem with modifying EditText in another function started by the thread:

Thread thRead = new Thread( new Runnable(){
    public void run(){
       EditText _txtArea = (EditText) findViewById(R.id.txtArea);
       startReading(_txtArea);
    }
 });

my function is as follows:

public void startReading(EditText _txtArea){
         _txtArea.setText("Changed");
}

It always force closes while trying to modify the edittext. Does someone know why?

like image 319
Mark Manickaraj Avatar asked Sep 12 '25 04:09

Mark Manickaraj


1 Answers

UI views should not be modified from non-UI thread. The only thread that can touch UI views is the "main" or "UI" thread, the one that calls onCreate(), onStop() and other similar component lifecycle function.

So, whenever your application tries to modify UI Views from non-UI thread, Android throws an early exception to warn you that this is not allowed. That's because UI is not thread-safe, and such an early warning is actually a great feature.


UPDATE:

You can use Activity.runOnUiThread() to update UI. Or use AsyncTask. But since in your case you need to continuously read data from Bluetooth, AsyncTask should not be used.

Here is an example for runOnUiThread():

runOnUiThread(new Runnable() {            
    @Override
    public void run() {
        //this will run on UI thread, so its safe to modify UI views.
         _txtArea.setText("Changed");
    }
});
like image 141
inazaruk Avatar answered Sep 14 '25 18:09

inazaruk