J'essaie d'utiliser un gestionnaire pour avoir du code exécuté dans un certain laps de temps.Android: problème en utilisant un gestionnaire et postDelayed()
Cela fonctionne bien dans deux de mes cours, mais je suis en cours d'exécution sur un problème avec celui-ci:
Une de ma classe étend l'activité, et démarre un thread (qui implémente Runnable).
Dans ma méthode d'exécution(), je l'ai, comme dans mes autres classes:
mHandler = new Handler();
mHandler.removeCallbacks(StopRequest);
mHandler.postDelayed(StopRequest, 30000);
Le programme semble se plaindre:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Je ne comprends pas pourquoi il est l'affichage, quelqu'un pourrait-il m'aider s'il vous plaît?
EDIT: Ajout de parties de mon code:
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(clientSocket.getOutputStream())), true);
out.println("VOICE_CALL_REQUEST");
// Wait for a response
// Set a timer (about 30 seconds)
mHandler = new Handler();
mHandler.removeCallbacks(StopRequest);
mHandler.postDelayed(StopRequest, 3000);
// Ready reply
InputStream stream = clientSocket.getInputStream();
BufferedReader data = new BufferedReader(new InputStreamReader(stream));
String line = data.readLine();
mHandler.removeCallbacks(StopRequest); // Timer is removed here
Et si la minuterie touche 30 secondes:
// Stop a call request after some amount of time
private Runnable StopRequest = new Runnable() {
public void run() {
// Send a message to cancel the voice call
out.println("VOICE_CALL_CANCEL");
// Close the port
try {
clientSocket.close();
}
catch (IOException e) { finish(); }
}
};
Merci beaucoup,
Jary
Devrais-je simplement utiliser la classe Timer alors? Eh bien ce que j'essaie de faire est d'envoyer un paquet TCP et d'attendre 30 secondes, si aucune réponse n'a été reçue (ie: l'autre client n'a pas choisi un choix), terminez et fermez la connexion. – Jary
J'ai fait une petite erreur aussi (peut-être pas d'importance), mais la classe étend réellement l'activité et non le service. Merci beaucoup. – Jary
Est-ce que vous lisez avec un Socket? Ne pouvez-vous pas simplement utiliser 'Socket.setSoTimeout()'? – EboMike