Предаване на MainActivity в параметрите

Трябва да стартирам AsyncTask в нишката на потребителския интерфейс, но конструкторът има параметър (MainActivity parentActivity). Наистина не разбирам защо трябва да се прилага и как трябва да го премина.

Тук Eclipse казва „Не може да преобразува MainActivity в променлива.“ Същото за Activity.MainActivity.

new DownloaderTask(MainActivity).execute();`

И конструктора.

public DownloaderTask(MainActivity parentActivity) {
    super();

    mParentActivity = parentActivity;
    mApplicationContext = parentActivity.getApplicationContext();

}

person Mabjik    schedule 26.02.2014    source източник


Отговори (2)


Промени този ред...

new DownloaderTask(MainActivity).execute();

до това...

new DownloaderTask(MainActivity.this).execute();

И вие предавате Context от MainActivity, а не дейността...така че в DownloaderTask() конструктора параметърът ще бъде тип Context, а не MainActivity...Конструкторът трябва да изглежда по следния начин...

public DownloaderTask(Context context) {
    super();

    mApplicationContext = context;

}
person Hamid Shatu    schedule 26.02.2014
comment
да! Това си помислих, но тази програма всъщност е задача с липсващи блокове код. А този конструктор вече е написан и не трябва да го променям. Така че предавам екземпляр и след това получавам контекст вече в конструктора. - person Mabjik; 26.02.2014
comment
можеш ли да публикуваш пълния си AsyncTask? за да мога да ти помогна повече? и аз се опитвам да разбера проблема, като подавам MainActivity екземпляр...това работи добре за мен. - person Hamid Shatu; 26.02.2014
comment
Изглежда, че дейността AsyncTask работи сега. Но имам проблеми с приемника. stackoverflow.com/questions/22051532/receiver-not-registered - person Mabjik; 26.02.2014

можете да се обадите по следния начин, ако се обаждате директно от MainActivity

new DownloaderTask(this).execute();

или ако се обаждате от вътрешен клас можете да се обадите като

new DownloaderTask(MainActivity.this).execute();
person stinepike    schedule 26.02.2014