Я пытаюсь создать массив 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);
}
}