AsyncTaskからデータを抽出する最良の方法はどれですか?バックグラウンドでデータを管理する良い方法はありますか?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を使用してコードですか?
[AsyncTaskが別のクラスであるため、OnPostExecute()の結果をメインアクティビティに取得する方法](http://stackoverflow.com/questions/12575068/how-to-get-the-result- Asynctask-is-a) –
最初に、 'onPostExecute'がそれを知るように' doInBackground'から何かを実際に返す必要があります。代わりに、AsyncTaskなしでソケット通信を簡単にするライブラリがあるかもしれません。 –
[この回答](http://stackoverflow.com/a/38004234/2308683)では、ソケット操作のための 'AsyncTask'は、おそらく理想的ではないと説明しています。 –