如何在asynctask中调用两个不同的http连接

时间:2013-10-05 18:51:16

标签: android

如何在asynctask背景中调用两个不同的网址并分别调用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);
    }
}

1 个答案:

答案 0 :(得分:0)

除了Java方式(Threadpools)之外,还有两种可能的Android方式。

  • 使用两个参数调用doInBackground()(实际上尽可能多)。这将在结束时调用onPostExecute()一次。

  • 另外覆盖AsyncTask.onPostProgress()并在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);
        }
    }
    
  • 如果这仍然不完全,你需要什么,你可以做第三件事:构建两个AsyncTasks并并行运行它们。