0

如何在 asynctask 后台调用两个不同的网络 url 并onPostExecute分别调用?任何想法请帮助我。下面是我的代码,它适用于一个网络连接。在我的应用程序中有两个不同的网络连接。

public class TheTask extends AsyncTask<Void, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Void... arg0) {
        try {
            String query = URLEncoder.encode("American%20Cheese%20Burger", "utf-8");
            String url = "http://198.57.208.46.xyz";
            Log.i("url",""+url);
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(url); 
            HttpResponse response = client.execute(request);
            HttpEntity resEntity = response.getEntity();
             _response=EntityUtils.toString(resEntity);
        } catch(Exception e)
        {
            e.printStackTrace();
        }
        return _response;
    }


    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        tv.setText(result);
    }
}
4

1 回答 1

0

除了 Java 方式(线程池)之外,还有 Android 方式有两种可能性。

  • 使用两个参数调用doInBackground()(实际上随心所欲)。这将在最后调用onPostExecute()一次。

  • 另外覆盖AsyncTask.onPostProgress()并在每个 url 上调用它publishProgress(_response);。然后将在每个 url 和 UI-Thread 中调用它,因此它应该满足您的要求。代码如下所示:

    public class TheTask extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... urls) {
            for(String url : urls) {
                Log.i("url", url);
                // Work with the URL, like reading the JSON and build _response
                publishProgress(_response);
            }
            return _response;
        }
    
        @Override
        protected void onProgressUpdate(String _response) {
             super.onProgressUpdate(_response);
             tv.setText(_response);
        }
    }
    
  • 如果这仍然不是您所需要的,那么您可以做第三件事:构建两个 AsyncTask 并并行运行它们。

于 2013-10-05T20:02:33.623 回答