Android. Błąd przy próbie wyłączenia ProgressDialog

0

Witam.

Kod ma wyświetlać ProgressDialog podczas wykonywania zadania AsyncTask. Pokazuje się okieko, niestety wywala mi aplikacje na linijce pd.dissmis();

class DownloadTask extends AsyncTask<String, Boolean, String>
{
   private ProgressDialog pd;
private MainActivity mainActivity;

    DownloadTask(MainActivity main){
       mainActivity=main;
    }

    private String downloadUrl(String strUrl) throws IOException { ...}
        
    
    @Override
    protected void onProgressUpdate(Boolean... progress) {

    }

    @Override
    protected void onPostExecute(String result)
    {

        super.onPostExecute(result);

      pd.dismiss();


       ParserTask parserTask = new ParserTask(mainActivity);

        // Invokes the thread for parsing the JSON data

        parserTask.execute(result);

    }
}

Wcześniej tą samą klasę asynchroniczną miałem zagnieżdżoną w MainActvity i wtedy wszystko działało jak należy. Problem pojawił się po przeniesieniu klasy na zewnątrz.

0
  1. pd jest nullem ?
  2. Przechowywanie referencji do Activity w async tasku to zło.
  3. AsyncTask to zło.
0

Faktycznie, pd ma wartość null. Mogłem to sprawdzić od razu. Pytanie to dlaczego tak jest. Dlaczego wszystko działało poprawnie kiedy ta klasa była zagnieżdżona ?
Rozumiem czym grozi przechowywanie referencji do aktywności w AsyncTask, natomiast nie mam też pomysłu jak inaczej można by to rozwiązać.

0

Klasa zagnieżdzona ma dostęp do pól klasy w której jest zagnieżdzona (w tym przypadku do pd). Rozwiązań jest wiele, generalnie odradzam używanie AsyncTask'ów. Ostatnio modna jest RxJava, polecam się zaznajomić, np: http://stablekernel.com/blog/replace-asynctask-asynctaskloader-rx-observable-rxjava-android-patterns/

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