[英]Cannot execute task: the task has already been executed error in downloading items
[英]AsyncTask android exception (Cannot execute task: the task has already been executed)
我有java.lang.IllegalStateException:無法執行任務:該任務已經執行(一個任務只能執行一次),盡管我這樣創建了AsyncTask的新實例
new ClientEngine(ip, port).execute(WindowsEventsEnum.MouseLeftButtonClick);
這是我的代碼
public class ClientEngine extends AsyncTask<WindowsEventsEnum, Void, Void>{
final String ip;
final int port;
DatagramSocket socket;
InetAddress remoteAdress;
DatagramPacket sendingPacket;
final String VOLUMEUP = "01";
final String VOLUMEDOWN = "02";
final String LMBCLICK = "11";
final String RMBCLICK = "12";
final String MMBUP = "21";
final String MMBDOWN = "22";
final String ENDCONNECTION = "ec";
public ClientEngine(String ip, int port) throws SocketException, UnknownHostException {
this.ip = ip;
this.port = port;
socket = new DatagramSocket();
remoteAdress = InetAddress.getByName(ip);
}
public void OpenConnection() throws IOException {
}
public void CloseConnection() throws IOException {
socket.close();
}
public void MouseLeftButtonClick() throws IOException {
byte[] sendDatagram = LMBCLICK.getBytes();
sendingPacket = new DatagramPacket(sendDatagram, sendDatagram.length, remoteAdress, port);
socket.send(sendingPacket);
}
public void MouseRightButtonClick() throws IOException {
byte[] sendDatagram = RMBCLICK.getBytes();
sendingPacket = new DatagramPacket(sendDatagram, sendDatagram.length, remoteAdress, port);
socket.send(sendingPacket);
}
public void SystemVolumeUp() throws IOException {
}
public void SystemVolumeDown() throws IOException {
}
@Override
protected Void doInBackground(WindowsEventsEnum... params) {
switch (params[0]) {
case MouseLeftButtonClick:
try {
MouseLeftButtonClick();
CloseConnection();
} catch (IOException e) {
e.printStackTrace();
}
break;
case MouseRightButtonClick:
try {
MouseRightButtonClick();
CloseConnection();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
抱歉,如果您已解決問題。 但是通常,只要您遇到這樣的異常,
java.lang.IllegalStateException:無法執行任務:該任務已經執行(一個任務只能執行一次)
檢查是否遵循以下所有規則:
AsyncTask只能執行一次(如果嘗試第二次執行,則將引發異常。)
就像多次啟動一個線程是非法的情況一樣。
一次啟動一個線程永遠是不合法的。 特別是,線程一旦完成執行就可能不會重新啟動。
因此,創建一個新實例,例如new asyncTask().execute();
是唯一的選擇
onPreExecute(), doInBackground(), onProgressUpdate(),onPostExecute()
。
必須在UI線程上加載AsyncTask類。 從JELLY_BEAN開始,這是自動完成的。
必須在UI線程上創建任務實例。
必須在UI線程上調用execute(Params ...)。
確保已遵循代碼中的所有5條規則。
了解更多: https : //developer.android.com/reference/android/os/AsyncTask.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.