哪种方法是从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从这段代码中提取“响应”?
答案 0 :(得分:0)
如果我理解正确的话:有一个商务舱想知道收到的回复。
所以你的异步任务必须以某种方式通知另一个类,这可以在OnPostExecute方法中完成(除非使用的AsyncTask提供了这样的机制)。如果你必须自己实现它:有很多不同的可能性,从简单的对象等待/通知,使用CompletableFuture更复杂,或者只是传入(进入你的任务类)一个带回调方法的接口。
通知您的商务舱后,例如,通过一个简单的getter访问响应(你仍然需要实现)。