我想用一個處理程序在一段時間內執行一些代碼。Android:使用處理程序和postDelayed問題()
這種運作良好,在我的課2,但我這一個對一個問題運行:
我的一個類的擴展活動,並啓動一個線程(即實現Runnable)。
在我的run()方法,我有,在我的其他類:
mHandler = new Handler();
mHandler.removeCallbacks(StopRequest);
mHandler.postDelayed(StopRequest, 30000);
該計劃似乎在抱怨:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我不明白爲什麼它被張貼,有人可以幫我嗎?
編輯:我的代碼中添加部分:
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
,並在定時器擊中30秒:
// 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(); }
}
};
非常感謝,
Jary
我應該只使用Timer類嗎?那麼我想做的是發送一個TCP數據包並等待30秒,如果沒有收到答覆(即:其他客戶端沒有選擇一個選項),終止並關閉連接。 – Jary 2010-12-06 03:46:04