在我的应用程序中,我从asynctask获取来自互联网的天气信息,但有时服务器有点滞后,我想要最多10个请求(如果以前是不成功的),请求之间等待10秒。但当我让我的asynctask等待10秒(建模不响应服务器)时,主线程(用户界面)冻结,直到asynctask完成它的工作(发出10轮请求)。
这是我制作和执行asynctask的代码
WeatherGetter wg = new WeatherGetter();
wg.execute(url);
try {
weather = wg.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
这就是我等待的地方
if (cod != 200) {
synchronized (WeatherGetter.this) {
try {
WeatherGetter.this.wait(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
试试这种方式
不要等待线程
如果代码!= 200,则递归调用相同的函数
private void loadWhetherData(final int count) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
WeatherGetter wg = new WeatherGetter();
wg.execute(url);
try {
weather = wg.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
if (cod != 200 && count<10) {
loadWhetherData(++count);
}
return null;
}
}.execute();
}
拨打强>
此方法将调用10次,直至不成功
loadWhetherData(1);