【问题标题】:effort to extract data from AsyncTask努力从 AsyncTask 中提取数据
【发布时间】:2016-11-03 18:48:29
【问题描述】:

从 AsyncTask 中提取数据的最佳方法是什么?有没有更好的方法在后台管理数据?

到目前为止,这是我用来进行套接字通信和更改消息的函数:

public class MyClientTask extends AsyncTask<Void, Void, Void> {
    String dstAddress;
    int dstPort;
    String response = "";

    MyClientTask(String endereco, int porta) {
        dstAddress = endereco;
        dstPort = porta;
    }

    @Override
    protected Void doInBackground(Void... arg0) {
        try {
            socket = new Socket(dstAddress, dstPort);
            socketStatus = true;

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024);
            byte[] buffer = new byte[1024];
            int bytesRead;
            InputStream inputStream = socket.getInputStream();
            /*
             * notice:
             * inputStream.read() will block if no data return
             */
            response = "";
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                byteArrayOutputStream.write(buffer, 0, bytesRead);
                response = byteArrayOutputStream.toString("UTF-8");
            }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            response = "UnknownHostException: " + e.toString();
            socketStatus = false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            response = "IOException: " + e.toString();
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}

正如我所见,它的处理速度很快,但是如何使用 onPostExecute 从这段代码中提取“响应”?

【问题讨论】:

标签: java android sockets android-asynctask


【解决方案1】:

如果我对您的理解正确:某处的商务舱希望了解收到的回复。

所以你的异步任务必须以某种方式通知这个其他类,这可以在 OnPostExecute 方法中完成(除非使用的 AsyncTask 自己提供这样的机制)。如果你必须自己实现它:有很多不同的可能性,从简单的对象等待/通知,到更复杂的使用 CompletableFuture,或者只是传入(到你的任务类)带有回调方法的接口。

一旦您的商务舱收到通知,例如通过一个简单的 getter 访问响应(您仍然需要实现)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2021-08-15
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多