我有下面的代碼運行在的AsyncTask客戶端套接字連接:的Android的AsyncTask publishProgress不叫onProgressUpdate
@Override
protected Boolean doInBackground(Void... params) { //This runs on a different thread
boolean result = false;
try {
Log.i("AsyncTask", "doInBackground: Creating socket");
SocketAddress sockaddr = new InetSocketAddress("192.168.1.115", 9090);
nsocket = new Socket();
nsocket.connect(sockaddr, 5000); //10 second connection timeout
if (nsocket.isConnected()) {
nis = nsocket.getInputStream();
wr = new BufferedWriter(new OutputStreamWriter(nsocket.getOutputStream()));
Log.i("AsyncTask", "doInBackground: Socket created, streams assigned");
Log.i("AsyncTask", "doInBackground: Waiting for inital data...");
sockState = true;
byte[] buffer = new byte[4096];
int read = nis.read(buffer, 0, 4096); //This is blocking
while(read != -1){
byte[] tempdata = new byte[read];
System.arraycopy(buffer, 0, tempdata, 0, read);
publishProgress(tempdata);
Log.i("AsyncTask", "doInBackground: Got some data");
read = nis.read(buffer, 0, 4096); //This is blocking
}
}
} catch (IOException e) {
e.printStackTrace();
Log.i("AsyncTask", "doInBackground: IOException");
result = true;
} catch (Exception e) {
e.printStackTrace();
Log.i("AsyncTask", "doInBackground: Exception");
result = true;
} finally {
try {
nis.close();
wr.close();
nsocket.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Log.i("AsyncTask", "doInBackground: Finished");
}
return result;
}
@Override
protected void onProgressUpdate(byte[]... values) {
Log.d("KMC.NetworkTask", String.valueOf(values[0]));
if (values.length > 0) {
Log.d("KMC.NetworkTask", "onProgressUpdate: " + values[0].length + " bytes received.");
result = new String(values[0]);
}
}
插座沒有工作。然而,onProgressUpdate不被調用,即使後臺任務告訴我數據進來。
任何人都有一些指針給我?我在google上找不到任何東西:|
多少數據,你在看什麼?如果它不是很多,那麼後臺線程可能在第一次進度更新發生之前完成。 – 2012-04-22 10:27:08
只有幾個字節... somethimes只有「真正」發送..順便說一句,後臺線程是一個循環,套接字保持打開,任務沒有完成 – 2012-04-23 12:24:57