【问题标题】:How to put an asynctask inside loop如何将异步任务放入循环中
【发布时间】:2015-12-04 22:27:41
【问题描述】:

实际上我想要做的是在具有不同值的循环内运行一个异步任务。因此,一旦当前正在运行的 asynctask 完成,它将使用另一个值再次启动 asynctask,并且它将继续直到循环结束。

这里,第一个 asynctask 需要在调用后立即启动,而下一个 asynctask 在前一个 asynctask 完成之前不会启动。

代码将类似于:

Myasync mAsync = new Myasync();

for(int i=0; i<5 ; i++)
{
  mAsync.execute(i);
}

怎么做? :-)

【问题讨论】:

  • 每个AsyncTask 完成后,你想在UI thread 上做一些事情吗?
  • @Yuriy Kolbasinskiy:不,我不需要在每次异步任务完成后在 UI 线程中做任何事情。

标签: android android-asynctask


【解决方案1】:

我在你的 doInBackgroundMethod 中建议这样的东西:

protected ArrayList<String> doInBackground(String... urls) {
    ArrayList<String> result = new ArrayList<>();
    for(int i = 0; i< urls.length; i++){
        try {
            URL url = new URL(urls[i]);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            try {
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                StringBuilder stringBuilder = new StringBuilder();
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line).append("\n");
                }
                bufferedReader.close();
                result.add(stringBuilder.toString());
            } finally {
                urlConnection.disconnect();
            }

        } catch (Exception e) {
            Log.e("ERROR", e.getMessage(), e);
            result.add(null);
        }
    }
    return result;
}

注意String... urls 参数

【讨论】:

  • 这对我来说非常有效。 Shaon Hasan:如果这对你有用,你能把它标记为接受的答案吗?
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 2017-09-30
  • 2014-04-19
  • 2022-12-16
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多