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 <[email protected]> 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 <[email protected]> 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 [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