Android 异步任务数组创建
我正在尝试为我的Android项目创建AsyncTask数组 将数据分配给TextView的。我需要为每个城市数据分别执行任务 我的单一异步任务工作正常,所以我认为主要方法是好的。 当我尝试创建任务数组时,问题就开始了 I获取错误Android 异步任务数组创建,android,android-asynctask,Android,Android Asynctask,我正在尝试为我的Android项目创建AsyncTask数组 将数据分配给TextView的。我需要为每个城市数据分别执行任务 我的单一异步任务工作正常,所以我认为主要方法是好的。 当我尝试创建任务数组时,问题就开始了 I获取错误尝试在空引用上调用虚方法 数组任务和单个任务执行完全相同的代码,所以问题一定是我如何创建数组 我张贴整个主要活动,以显示我试图做什么。使用单任务和阵列任务。 如果有任何帮助,我将不胜感激 private LinearLayout editLayout; private
尝试在空引用上调用虚方法
数组任务和单个任务执行完全相同的代码,所以问题一定是我如何创建数组
我张贴整个主要活动,以显示我试图做什么。使用单任务和阵列任务。
如果有任何帮助,我将不胜感激
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);
}
}
private LinearLayout编辑布局;
私人线路布局1;
私人线路布局2;
私人线路布局3;
私人线路布局布局4;
int n;
TextView[]城市=新TextView[10];
TextView[]时间=新建TextView[10];
TextView[]温度=新TextView[10];
私有图像视图delete1;
私有图像视图删除2;
私有图像视图删除3;
私有图像视图删除4;
私有图像视图条件1;
私有图像视图条件2;
私有图像视图条件3;
私有图像视图条件4;
天气=新天气;
任务=新任务();
任务task1=新任务();
私有任务[]myTasks=新任务[10];
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editLayout=(LinearLayout)findViewById(R.id.layEdit);
布局1=(线性布局)findViewById(R.id.lay1);
布局2=(线性布局)findViewById(R.id.lay2);
布局3=(线性布局)findViewById(R.id.lay3);
布局4=(线性布局)findViewById(R.id.lay4);
城市[0]=(TextView)findViewById(R.id.city1);
城市[1]=(TextView)findViewById(R.id.city2);
城市[2]=(TextView)findViewById(R.id.city3);
城市[3]=(TextView)findViewById(R.id.city4);
时间[0]=(TextView)findViewById(R.id.time1);
时间[1]=(TextView)findViewById(R.id.time2);
时间[2]=(TextView)findViewById(R.id.time3);
时间[3]=(TextView)findViewById(R.id.time4);
温度[0]=(TextView)findViewById(R.id.temp1);
温度[1]=(TextView)findViewById(R.id.temp2);
温度[2]=(TextView)findViewById(R.id.temp3);
温度[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);
条件1=(ImageView)findViewById(R.id.sun1);
条件2=(ImageView)findViewById(R.id.sun2);
条件3=(ImageView)findViewById(R.id.sun3);
条件4=(ImageView)findViewById(R.id.sun4);
//weatherData(“法国巴黎”);
//气象数据(“法国巴黎”,0);
loadTask(1,“爱尔兰都柏林”);
专用void加载任务(int sInt,String city){
这个,n=n;
myTasks[sInt].execute(新字符串[]{city+“&APPID=“+WeatherApiNumber+”&units=metric”});
}
公共void天气数据(字符串城市,int n){
这个,n=n;
task1.execute(新字符串[]{city+”&APPID=“+WeatherApiNumber+”&units=metric”});
}
私有类任务扩展了异步任务{
@凌驾
受保护的天气背景(字符串…参数){
字符串数据=((new WeatherClient()).getWeatherData(参数[0]);
weather=Parser.getWeather(数据);
回归天气;
}
@凌驾
执行后受保护的空(天气){
super.onPostExecute(天气);
城市数据(n);
}
}
公共无效城市数据(int n){
city[n].setText(weather.place.getCity());
time[n].setText(Integer.toString(weather.place.getTimeZone());
温度[n].setText(Double.toString(weather.temp.getTemp()).substring(0,2));
//任务。取消(true);
}
公共无效城市数据2(int n){
;
city[n].setText(weather.place.getCity());
time[n].setText(Integer.toString(weather.place.getTimeZone());
温度[1].setText(Double.toString(weather.temp.getTemp()).substring(0,2));
//任务。取消(true);
}
}
您没有向任务数组myTasks分配任何内容
在这一行中,您只是初始化数组,而不是数组项
private Task[] myTasks = new Task[10];
您应该在某个时刻将任务分配给myTasks中的单元格,然后才对其调用execute类似myTasks[0]=new task()的可能重复项;myTasks[1]=新任务();myTasks[2]=新任务();myTasks[3]=新任务();?确切地但是,为什么在启动这些AsyncTast对象后需要对其进行引用呢?您应该使用一些支持列表或数组(AdapterView)的本机视图,如RecyclerView。关于AsyncTasks的另一件事是,当您同时启动多个任务时,它们将不会并行运行,除非您使用执行器显式定义它们。默认情况下,它们一个接一个地运行,这是默认行为。如果要覆盖它,请使用executeonexecutor