如何在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);
}
}
答案 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并并行运行它们。