AsyncTask Array создание - PullRequest
       10

AsyncTask Array создание

0 голосов
/ 28 июня 2019

Я пытаюсь создать массив AsyncTask для моего проекта Android назначить данные для TextView. Мне нужны отдельные задачи для каждого города данных.

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

Я получаю ошибку Attempt to invoke virtual method on null reference

Задача массива выполняет тот же код, что и отдельная задача, поэтому проблема должна быть в том, как я создал массив

Я публикую всю Основную активность, чтобы показать, что я пытаюсь сделать. Как с одиночными, так и с массивными задачами. Буду благодарен за любую помощь.

private LinearLayout editLayout;
private LinearLayout layout1;
private LinearLayout layout2;
private LinearLayout layout3;
private LinearLayout layout4;
int n;
TextView[] city = new TextView[10];
TextView[] time = new TextView[10];
TextView[] temperature = new TextView[10];


private ImageView delete1;
private ImageView delete2;
private ImageView delete3;
private ImageView delete4;

private ImageView condition1;
private ImageView condition2;
private ImageView condition3;
private ImageView condition4;

Weather weather = new Weather();
Task task = new Task();
Task task1 = new Task();
private Task[] myTasks = new Task[10];


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    editLayout = (LinearLayout) findViewById(R.id.layEdit);
    layout1 = (LinearLayout) findViewById(R.id.lay1);
    layout2 = (LinearLayout) findViewById(R.id.lay2);
    layout3 = (LinearLayout) findViewById(R.id.lay3);
    layout4 = (LinearLayout) findViewById(R.id.lay4);

    city[0] = (TextView) findViewById(R.id.city1);
    city[1] = (TextView) findViewById(R.id.city2);
    city[2] = (TextView) findViewById(R.id.city3);
    city[3] = (TextView) findViewById(R.id.city4);

    time[0] = (TextView) findViewById(R.id.time1);
    time[1] = (TextView) findViewById(R.id.time2);
    time[2] = (TextView) findViewById(R.id.time3);
    time[3] = (TextView) findViewById(R.id.time4);

    temperature[0] = (TextView) findViewById(R.id.temp1);
    temperature[1] = (TextView) findViewById(R.id.temp2);
    temperature[2] = (TextView) findViewById(R.id.temp3);
    temperature[3] = (TextView) findViewById(R.id.temp4);

    delete1 = (ImageView) findViewById(R.id.delete1);
    delete2 = (ImageView) findViewById(R.id.delete2);
    delete3 = (ImageView) findViewById(R.id.delete3);
    delete4 = (ImageView) findViewById(R.id.delete4);

    condition1 = (ImageView) findViewById(R.id.sun1);
    condition2 = (ImageView) findViewById(R.id.sun2);
    condition3 = (ImageView) findViewById(R.id.sun3);
    condition4 = (ImageView) findViewById(R.id.sun4);
    //weatherData("Paris, France");

    //weatherData("Paris, France", 0);
    loadTask(1,"Dublin, Ireland" );




private void loadTask(int sInt, String city){
    this.n=n;
    myTasks[sInt].execute(new String[]{city + "&APPID="+ WeatherApiNumber + "&units=metric"});
}
public void weatherData(String city, int n){
    this.n=n;
    task1.execute(new String[]{city + "&APPID="+ WeatherApiNumber + "&units=metric"});

}
private class Task extends AsyncTask<String, Void, Weather>{

    @Override
    protected Weather doInBackground(String... params) {
        String data = ((new WeatherClient()).getWeatherData(params[0]));
        weather = Parser.getWeather(data);

        return weather;
    }
    @Override
    protected void onPostExecute(Weather weather) {
        super.onPostExecute(weather);

        cityData(n);

    }

}
public void cityData(int n){

    city[n].setText(weather.place.getCity());
    time[n].setText(Integer.toString(weather.place.getTimeZone()));
    temperature[n].setText(Double.toString(weather.temp.getTemp()).substring(0,2));
    //task.cancel(true);


}
public void cityData2(int n){
    ;
    city[n].setText(weather.place.getCity());
    time[n].setText(Integer.toString(weather.place.getTimeZone()));
    temperature[1].setText(Double.toString(weather.temp.getTemp()).substring(0,2));
    //task.cancel(true);

    }
}

1 Ответ

1 голос
/ 28 июня 2019

Вы ничего не назначаете для своего массива задач myTasks

в этой строке вы только инициализируете массив, но не элементы массива.

private Task[] myTasks = new Task[10];

В какой-то момент вы должны назначить задачу для ячейки в myTasks и только затем вызывать на ней команду execute

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...