2012-10-03 18 views
5

Czy ktoś mógłby mi powiedzieć, co tu jest nie tak?Jak działa AsyncTask <String, Void, Void>?

public class BackgroungTask extends AsyncTask<String, Void, Void> { 

    public Void doInBackground(String... params) { 
     //tasks 
     return; //error occurs here! 
    } 

    public void onPostExecute(Void result) { 
     //codes 
    } 
} 

Powyższa klasa nie zależy od wartości zwracanych. Tak więc onPostExceute() po prostu wykonuje zapisane tam kody.

Z góry dzięki!

+0

'' void' Void' i są różne, odnoszą http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.0_r1/android/ os/AsyncTask.java –

+0

Skorzystaj z tej strony, 1. [Asynchronous Task_tutorial] (http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/) 2. [Przykład z Wyjaśnienie zadania asynchronicznego] (http://labs.makemachine.net/2010/05/android-asynctask-example/) – Aerrow

Odpowiedz

15

właśnie zwraca zero.

public class BackgroungTask extends AsyncTask<String, Void, Void> { 

    public Void doInBackground(String... params) { 
     //tasks 
     return null; 
    } 

    public void onPostExecute(Void result) { 
     //codes 
    } 
} 
6

Myślę, że trzeba użyć "return null;" zamiast po prostu "return", jako Void jest klasą wokół zwykłej wartości "void".

0

doInBackGround zwraca wartość NULL

public class BackgroungTask extends AsyncTask<String, Void, Void> { 
.... 
.... 
} 

wyboru tego Android dev doc dla asynchronicznego zadania w andorid

5

W doInBackGround zwróci null, jak Void jest obiektem (nie = void) ..

public class BackgroungTask extends AsyncTask<String, Void, Void> { 

public Void doInBackground(String... params) { 
    //tasks 
    return null; //error occurs here! 
} 

public void onPostExecute(Void result) { 
    //codes 
} 
} 
+1

Powinieneś również wyjaśnić ** dlaczego ** musisz zwrócić 'null' tam. – Luksprog

+0

Zgadzam się z @Luksprog, to nie jest odpowiedź. –

+0

Działa w ten sposób! Cóż, jeśli to nie jest odpowiedź, to co jest właściwe? – Renjith

4

AsyncTask działa w ten sposób:

onPreExecute -> doInBackGround -> onPostExecute

Odrzucenie progressUpdates etc, tak szybko doInBackGround jest kompletny, sterowanie przechodzi do onPostExecute. Prosty przepływ zakłóca ten przepływ, powodując błąd. Aby rozwiązać ten problem, należy zastąpić return null Ponieważ jest to pustka. Parametry instrukcji return są przekazywane do parametru onPostExecute jako parametr, w którym można go użyć, aby zobaczyć, czy zakończyło się pomyślnie.

Powiązane problemy