Witam.
Walczę z AsyncTask w Androidzie.
Stworzyłem klasę która ma pobierać treść www.
Chciałem do tego celu wykorzystać AsyncTask.
Klasa wygląda tak:
public class WebConnector {
public AsyncTask<String, Void, String> GetContent = new AsyncTask<String, Void, String>() {
@Override
protected String doInBackground(String... params) {
String fullString = params[0];
Log.d("WebConnector", "AsyncClic doInBackground! ");
// tu znajdzie się kod odpowiedzialny za pobieranie strony
return fullString;
}
@Override
protected void onPreExecute() {
Log.d("WebConnector", "AsyncClic PreExecute! ");
}
@Override
protected void onPostExecute(String s) {
Log.d("WebConnector", "AsyncClic PostExecute! ");
}
};
}
W głównej klasie stworzyłem obiekt WebConnector
a w zdarzeniu przycisku dodałem:
try {
String content = wsc.GetContent.execute("test").get();
Log.d("MainClass", content);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
Problem w tym że przycisk działa tylko raz, wtedy w logu widzę:
10-26 23:16:39.772 14672-14672/com.example.user.myapplication D/WebConnector: AsyncClic PreExecute!
10-26 23:16:39.773 14672-15002/com.example.user.myapplication D/WebConnector: AsyncClic doInBackground!
10-26 23:16:39.773 14672-14672/com.example.user.myapplication D/MainClass: test
10-26 23:16:39.788 14672-14672/com.example.user.myapplication D/WebConnector: AsyncClic PostExecute!
drugie kliknięcie powodwuje wyjątek:
10-26 23:16:49.619 14672-14672/com.example.user.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.user.myapplication, PID: 14672
java.lang.IllegalStateException: Cannot execute task: the task has already been executed (a task can be executed only once)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:605)
Jeżeli metoda przechodzi do bloku onPostExecute
to chyba kończy swoje działanie?
Co w tej sytuacji powinienem zrobić?
Przy każdym kliknięciu tworzyć nową instancję klasy WebConnector
?
Z góry dziękuje za pomoc.