title: problem in synchronizing threads while using AsyncTask, Android
body: <p>I am making and application to send data using sockets from an android device to a server and in reverse.
  I am using an AsyncTask class to handle the connection. My problem is that at some point in my main Activity class i have to read from the input stream eg. </p>
  
  <pre><code>    conhandler = new ConnectionHandler();
      conhandler.execute();
      Log.i("AppOne", "Reading from stream");
      message = conhandler.readFromStream();
  </code></pre>
  
  <p>and what happens is that this code snippet is executed before my ConnectionHandler class has established a socket connection. Any ways to fix this issue?
  Here is the code to my ConnectionHandler class:  </p>
  
  <pre><code>public class ConnectionHandler extends AsyncTask&lt;Void, Void, Void&gt;{
  
  public static String serverip = "192.168.1.100";
  public static int serverport = 7777;
  Socket s;
  public DataInputStream dis = null;
  public DataOutputStream dos = null;
  public int message;
  
  
  
  @Override
  protected Void doInBackground(Void... params) {
  
      try {
          Log.i("AsyncTank", "doInBackgoung: Creating Socket");
          s = new Socket("192.168.1.100", 7777);
      } catch (Exception e) {
          Log.i("AsyncTank", "doInBackgoung: Cannot create Socket");
      }
      Log.i("AsyncTank", "doInBackgoung: Socket created");
      if (s.isConnected()) {
          try {
              Log.i("AsyncTank", "doInBackgoung: inside input try");
              dis = new DataInputStream(s.getInputStream());
              Log.i("AsyncTank", "doInBackgoung: InputStream assigned");
          } catch (IOException e) {
              // TODO Auto-generated catch block
              Log.i("AsyncTank", "doInBackgoung: Cannot assign Streams, Socket not connected");
              e.printStackTrace();
          }
          try {
              Log.i("AsyncTank", "doInBackgoung: inside output try");
              dos = new DataOutputStream(s.getOutputStream());
              Log.i("AsyncTank", "doInBackgoung: OutputStream assigned");
          } catch (IOException e) {
              // TODO Auto-generated catch block
              Log.i("AsyncTank", "doInBackgoung: Cannot assign Streams, Socket not connected");
              e.printStackTrace();
          }
      } else {
          Log.i("AsyncTank", "doInBackgoung: Cannot assign Streams, Socket is closed");
      }
  
      return null;
  }
  
  public void writeToStream(double lat, double lon) {
      try {
              Log.i("AsynkTask", "writeToStream : Writing lat");
              dos.writeDouble(lat);
              dos.flush();
          } catch (Exception e) {
          Log.i("AsynkTask", "writeToStream : Writing failed");
      }
      try {
              Log.i("AsynkTask", "writeToStream : Writing lon");
              dos.writeDouble(lon);
              dos.flush();
          } catch (Exception e) {
          Log.i("AsynkTask", "writeToStream : Writing failed");
      }
  }
  
  public int readFromStream() {
      try {
          if (s.isConnected()) {
              Log.i("AsynkTask", "readFromStream : Reading message");
              message = dis.readInt();
          } else {
              Log.i("AsynkTask", "readFromStream : Cannot Read, Socket is closed");
          }
      } catch (Exception e) {
          Log.i("AsynkTask", "readFromStream : Reading failed");
      }
      return message;
  }
  </code></pre>
  
  <p>}</p>