Je fais et l'application pour envoyer des données à l'aide de sockets d'un appareil Android à un serveur et à l'envers. J'utilise une classe AsyncTask pour gérer la connexion. Mon problème est qu'à un certain moment dans ma classe d'activité principale, je dois lire à partir du flux d'entrée, par exemple. Et ce qui se passe, c'est que cet extrait de code est exécuté avant que ma classe ConnectionHandler ait établi une connexion socket. Des moyens de résoudre ce problème? Voici le code à ma classe ConnectionHandler:problème dans la synchronisation des threads tout en utilisant AsyncTask, Android
public class ConnectionHandler extends AsyncTask<Void, Void, Void>{
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;
}
}
Vous devez lire à partir du flux dans la méthode doInBackground après que la connexion a été établie. –