android -Wie die Rückkehr Wert von asyncTask
ich will den Wert zurück, die von asynctask, nachdem es abgeschlossen. das ist mein code :
class asyncGet extends AsyncTask<Void, String, String> {
Boolean goterror = false;
@Override
protected String doInBackground(Void... params) {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
HttpResponse response;
try {
request.setHeader("Cache-Control", "no-cache");
request.setHeader("Cache-Control", "no-store");
response = client.execute(request);
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
str.append(line);
}
in.close();
return str.toString();
} catch (Exception e) {
goterror = true;
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (pDialog != null && pDialog.isShowing())
pDialog.dismiss();
if (result != null && goterror == false) {
}
}
Den async ist in einer anderen Klasse möchte ich zeigen das Ergebnis, wenn es fertig ist .
Wie kann ich wieder das Ergebnis aus dem async ?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie es behalten wollen asynchrone dann ist es schon in Ihrem code implementiert,
verwenden onPostExecute-Methode, "Ergebnis" enthält die zurückgegebenen Daten.
Oder, wenn Sie es wollen, um die Daten synchron verwenden Sie dann die erweiterte asynctask wie unten:
get()
hier wird die Ausführung synchron.AsyncTask
mit.get()
Funktion. Es blockiert den UI Thread.Können Sie eine Schnittstelle erstellen, wie folgt:
und erstellen Sie den Konstruktor des
AsyncTask
mitOnStringListener
als parameter:Und in Ihrem
onPostExecute
Methode können Sie die Rückgabe derString
senden, die es durch die MethodeonStringCompleted
:Natürlich, Ihre Methoden
onStringCompleted
undonStringError
müssen geschaffen werden, in der Aktivität, die Sie wollen, um das Ergebnis Ihrer AsyncTask. Von dort aus werden Sie in der Lage, verwenden Sie Ihr Ergebnis in Ihrer anderen Klasse.Ich erwarte, dass es wird Ihnen hilfreich sein!
onPostExecution
ist direkt in der aufrufenden Aktivität?onPostExecution
aus einer anderen Tätigkeit, sorry. Ich habe gerade, obwohl es könnte hilfreich sein.public abstract class
werden muss, so verlängert sich die @mohamad getan hat. und das Ergebnis von onPostExecute ist direkt im aufrufenden Aktivität/main-threaddoInBackground()
. Also ich würde vorschlagen, erweiternAsyncTask
im inneren Klasse. @Raghunandan: die Ausrichtung ist unabhängig von der Umsetzung der asyncTask Implementierung.Also die Philosophie ist, die Sie überschreiben
doInBackground
und wenn diedoInBackground
seine Aufgabe abgeschlossen ist, es gibt das Ergebnis anonPostExecute
das Ergebnis ist in deinem Haupt-thread.Lesen Sie die Volle Nutzung hier
und wenn Sie immer noch wollen die synchrone Ausführung Anruf get() wie erläutert durch @meghraj27
Können Sie eine Schnittstelle implementieren, um eine Aktivität oder eine Klasse, wo Sie wollen das Ergebnis der AsynTask und trigger-interface aus dem AsynTask.
Finden Sie diesen Beitrag
Wie handle return value von AsyncTask