Получение a не может сделать статическое redfrence для нестатического methed, когда я вызываю AsyncTask <Void.exicute

Я использую AsyncTask для загрузки растровых изображений в фоновом режиме. Я создал класс Mybackground, который унаследовал от AsyncTask. Если я сделаю следующее, это сработает,

new MyBackground().execute(); 

Но когда я так называю это,

 MyBackground mBackground=new MyBackground(); mBackground.p1=1; mBackground.p2="tets"; MyBackground.execute(); 

Я получаю, что ошибка не может сделать статическое refrence для нестатического. Почему я получаю эту ошибку. Есть ли способ сделать это? Если не то, что было бы хорошим способом передать в 2 разных аргументах, так как execute принимает только один параметр?

Вы должны вызвать mBackground.execute() который вызывает метод execute для конкретного экземпляра вашего класса MyBackground .

Вызов new MyBackground().execute() создает новый экземпляр MyBackground а затем вызывает его выполнение, поэтому вы не получаете ошибку.

Взгляните на Java: static и методы экземпляра, если вы не уверены в том, какая разница между статическим и экземпляром метода.

Статические методы не требуют наличия экземпляра этого типа, а статические свойства распределяются между всеми экземплярами класса.

Если вы хотите передать некоторые данные в свою AsyncTask вы можете создать для него новый конструктор:

 public class MyBackground extends AsyncTask<Void, Void, Void> { ... private int p1; private String p2; public MyBackground(int p1, String p2) { this.p1 = p1; this.p2 = p2; } ... } 

Затем вы использовали бы:

 MyBackground myBackground = new MyBackground(1,"tets"); myBackground.execute(); // or MyBackground myBackground = new MyBackground(1,"tets").execute(); 

Джозеф Эрл хорошо объясняет, почему вы получаете статическую ошибку.