调用onProgressUpdate

调用onProgressUpdate

我有以下代码在asynctask中运行客户端套接字连接:

@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上找不到任何内容:

最佳答案

值是一个表,所以当您写values [0]时会得到一个字节表,所以我认为您必须做这样的事情:
String.valueOf(values[0][0])

关于android - Android AsyncTask publishProgress不调用onProgressUpdate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10231277/

10-08 22:53