0

在我的应用程序中,我在 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();
                }
            }
        }
4

1 回答 1

2

试试这个方法

不要等待线程

如果 code!=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);
于 2013-09-13T07:00:09.623 回答