You can register a handler in your code and send message to update your UI component in Handler. I used this way to solve a similar problem like urs before. For exapmpel
if (socket.isConnected()) { OutputStreamOut = new ObjectOutputStream(socket. getOutputStream()); InputStreamIn = new ObjectInputStream(socket.getInputStream()); // everything worked fine until here //instead of doing this, send msg to a customized handler //statusTxt.setText("App is now connected to:\n" + IP + " : " mHandler.sendEmptyMessage(UPDATE TEXT); //use something like this + Port); // CRASHING !!!! connectBt.setText("Disconnect"); connected = true; continueBt.setVisibility(0); } else { On Wed, Jul 21, 2010 at 12:25 AM, stephan <dkn...@googlemail.com> wrote: > Yep. It seams quite obvious. Thoug we do not know what happens in > "statusTxt.setText("")" you are probably calling any UI object > (changing a Dialog message or what so ever). That's not nice. *grin* > > maybe you should use > > runOnUiThread(new Runnable() { > @Override > public void run() { > statusTxt.setText("App > is now connected to:\n" + IP + " : "+ Port); > } > }); > > > Stephan > > On 19 Jul., 20:16, Brion Emde <brione2...@gmail.com> wrote: > > It looks to me that you are trying to do stuff in the UI Thread while > > in the doInBackground() function. > > > > You are supposed to do UI related stuff in the onPostExecute(), > > onPreExecute() and onProgressUpdate(), not in doInBackground. > > > > This is what I'm talking about: > > > > if (socket.isConnected()) { > > OutputStreamOut = new > > ObjectOutputStream(socket.getOutputStream()); > > InputStreamIn = new > > ObjectInputStream(socket.getInputStream()); > > // everything worked fine until here > > > > !!!! This is talking to the UI Thread -> not allowed!!! > > > > statusTxt.setText("App is now > > connected to:\n" + IP + " : " > > + Port); // CRASHING !!!! > > connectBt.setText("Disconnect"); > > connected = true; > > continueBt.setVisibility(0); > > } else { > > throw new UnknownHostException(); > > } > > > > On Jul 19, 11:47 am, Francesco <francescoponti...@gmail.com> wrote: > > > > > Hi, when trying to start a socket connection in an AsyncTask, my > > > application crashes for no reason (debugger says > > > "android.view.ViewRoot$CalledFromWrongThreadException: Only the > > > original thread that created a view hierarchy can touch its views."). > > > > > If I remove the Async and use the same code, my application works (of > > > course, if I make the socket connect to a not valid IP or port, the > > > application freezes for 5 seconds, because that's the socket's > > > timeout). > > > As I'd like to avoid that 5 seconds freeze with wrong configurations, > > > I have to implement the AsyncTask. > > > > > The application works just fine opening the socket and everything > > > related, but as I try and make it change some TextViews, it gives this > > > error. The AsyncTask doc says: > > > > > "AsyncTask enables proper and easy use of the UI thread. This class > > > allows to perform background operations and publish results on the UI > > > thread without having to manipulate threads and/or handlers." > > > > > So I'm doing something legit. > > > > > This is the code, it's quite simple: > > > > > private class ConnectTask extends AsyncTask<Void, Void, Void> { > > > protected Void doInBackground(Void... params) { > > > try { > > > InetAddress inetAddr = > InetAddress.getByName(IP); > > > int PORT = Integer.parseInt(Port); > > > > > if (PORT < 0) > > > throw (new > NumberFormatException()); > > > if (IP.equals("")) > > > throw (new > UnknownHostException()); > > > > > SocketAddress sockaddr = new > InetSocketAddress(inetAddr, > > > PORT); > > > socket = new Socket(); > > > socket.connect(sockaddr, 5000); > > > > > if (socket.isConnected()) { > > > OutputStreamOut = new > > > ObjectOutputStream(socket.getOutputStream()); > > > InputStreamIn = new > ObjectInputStream(socket.getInputStream()); > > > // everything worked fine until here > > > statusTxt.setText("App is now connected > to:\n" + IP + " : " > > > + Port); // CRASHING !!!! > > > connectBt.setText("Disconnect"); > > > connected = true; > > > continueBt.setVisibility(0); > > > } else { > > > throw new UnknownHostException(); > > > } > > > } catch (SocketTimeoutException sockExc) { > > > statusTxt.setText("Connection timeout:\nplease, > review your IP/ > > > Port settings."); > > > } catch (NumberFormatException numExc) { > > > statusTxt.setText("Number Format > Error:\nplease, review your > > > Port settings."); > > > } catch (UnknownHostException e1) { > > > statusTxt.setText("Unknown Host > Error:\nplease, review your IP/ > > > Port settings."); > > > } catch (IOException e2) { > > > statusTxt.setText("Input/Output > Error:\nplease, review your > > > connection settings."); > > > } finally { > > > //dialog.dismiss(); > > > } > > > return null; > > > } > > > > > protected void onProgressUpdate(Void... progress) {} > > > > > protected void onPostExecute(Void result) {} > > > } > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to android-developers@googlegroups.com > To unsubscribe from this group, send email to > android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en