AsyncTask jako klasa zewnętrzna

Odpowiedz Nowy wątek
2014-12-30 10:15
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.


Pozdrawiam
Artur

Pozostało 580 znaków

2014-12-30 10:37

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

Pozostało 580 znaków

2014-12-30 11:38
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.


Pozdrawiam
Artur
edytowany 3x, ostatnio: chudya, 2014-12-31 08:16
jak nie masz metod abstrakcyjnych to nie musisz :) to jasne. Jedynie możesz tak zrobić po to żeby zabronić tworzenia instancji klasy pierwotnej gdzie nie masz opisanej PostExecute - wojciechmaciejewski 2015-01-02 08:20

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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