AsyncTask jako klasa zewnętrzna

0

Witam.
Mam problem z obiektami, niestety.
Otóż wewnątrz moich activity w aplikacji mam klasę, powiedzmy PobierzPlik, rozszerzającą AsyncTask służącą do pobrania małego pliku tekstowego. W każdym z Activity różni się ona treścią metody onPostExecute i tylko tym. W jednej z aktywności potrzebuję użyć PobierzPlik (oczywiście z różnymi onPostExecute) nawet dwukrotnie. Rozwiązałem to w ten sposób, że dwie klasy nazwałem inaczej (załóżmy PobierzPlik2). Jest przez to sporo kodu, co chciałbym skrócić.
Teraz pytanie zasadnicze: czy mogę stworzyć zewnętrzną klasę PobierzPlik (w zewnętrznym pliku, jak rozumiem)? Mam na myśli problem (dla mnie problem), jak z onPostExecute obiektu klasy PobierzPlik wywołać jakąś metodę ZróbCoś wewnątrz mojej klasy AcitityJakieśTam. Metoda ZróbCoś musiałaby oczywiście "zostać poinformowana", z którego obiektu została wywołana - jak wspomniałem, w jednym activity np. potrzebowałbym dwóch takich obiektów.
Jestem w pracy, więc teraz nie mogę podesłać kodu, jaki stosuję w tej chwili.
Wiem, że trochę nie za ciekawie to opisałem, ale może ktoś biegły w programowaniu obiektowym mi pomoże.

2

Proste, zrób sobie klasę abstrakcyjną rozszerzającą ASyncTask np taką

public abstract class Test extends AsyncTask {
    @Override
    protected Object doInBackground(Object[] params) {
        return null;
    }



    @Override
    protected void onPostExecute(Object o) {
        getFile();
    }

    protected abstract void getFile();
}

i stwórz sobie tyle klas ile potrzebujesz dziedziczących po Test i implementujących tylko metodę getFile

np

public class MyTest extends Test {
    @Override
    protected void getFile() {
//        Tutaj zrob cos dla tej konkretnej klasy
    }
}

takich klas możesz natłuc już bardzo dużo i robić sobie znimi co chcesz. A tak naprawdę to nawet nie musisz tworzyć własnej abstrakcyjnej metody tylko wystarczy że będzie napisywał postExecute w każdej ze swoich klas :)

pzdr

0
wojciechmaciejewski napisał(a):

Proste

Lubię takie odpowiedzi :)
Dziękuję - będę "męczył" temat wieczorem i dam znać, co mi z tego wyszło :)

EDIT:
Bardzo dziękuję za pomoc. Nadpisuję onPostExecute i działa pięknie :)

Jedna uwaga. W moim przypadku nie deklarowałem klasy i metod jako abstrakcyjnych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1