Welcher ist der beste Weg, um Daten aus AsyncTask zu extrahieren? Gibt es eine bessere Möglichkeit, Daten im Hintergrund zu verwalten?Aufwand zum Extrahieren von Daten aus AsyncTask
Bisher ist dies die Funktion Ich bin mit Socket-Kommunikation zu machen und ändern Nachrichten:
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;
}
}
Wie ich es schnell sehen kann, zu verarbeiten, aber wie kann ich es schaffe „Antwort“ zu extrahieren daraus Code mit onPostExecute?
Mögliches Duplikat von [Wie bekomme ich das Ergebnis von OnPostExecute() zur Hauptaktivität, weil AsyncTask eine separate Klasse ist?] (Http://stackoverflow.com/questions/12575068/how-to-get-the-result- of-onpostexecute-to-main-activity-as-asynctask-is-a) –
Zuerst müssen Sie etwas aus 'doInBackground' zurückgeben, damit der' onPostExecute' davon weiß. Alternativ gibt es wahrscheinlich Bibliotheken, die Socket-Kommunikation einfacher machen ohne AsyncTask –
Ein [diese Antwort] (http://stackoverflow.com/a/38004234/2308683) beschreibt, dass AsyncTask für eine Socket-Operation überhaupt nicht ideal ist . –