Android:连续发出2个http请求
我从用户那里得到了一个地址,我用它来获取lat/lng 获取lat/lng后,我需要向服务器发送POST请求,以使用保存数据 我在一个中运行GeoCoder请求,在onPostExecute回调中运行post请求 这是正确的方法还是有更好的方法 这是我的密码:Android:连续发出2个http请求,android,android-asynctask,android-volley,Android,Android Asynctask,Android Volley,我从用户那里得到了一个地址,我用它来获取lat/lng 获取lat/lng后,我需要向服务器发送POST请求,以使用保存数据 我在一个中运行GeoCoder请求,在onPostExecute回调中运行post请求 这是正确的方法还是有更好的方法 这是我的密码: private class GeoCoderAsync extends AsyncTask<String, Void, List<Address>>{ @Override prot
private class GeoCoderAsync extends AsyncTask<String, Void, List<Address>>{
@Override
protected List<Address> doInBackground(String... params) {
String address = params[0];
List<Address> addresses = null;
Geocoder coder = new Geocoder(Favorites.this);
try {
addresses = coder.getFromLocationName(address, 1);
} catch (IOException e) {
e.printStackTrace();
}
return addresses;
}
@Override
protected void onPostExecute(List<Address> result) {
Utils.dismissDialog(progDialog);
if (result != null) {
Address address = result.get(0);
...
//this makes a post request
VolleyHelper.post(request,AppConstants.URL.FAVORITES, getFavoritesSuccess(), getFavoritesError(), progDialog);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
Log.d(TAG, "Got Nothing!!!");
}
}
}
我正在AsyncTask中运行GeoCoder请求,并运行post
onPostExecute回调中的请求
这样做对吗
否,因为onPostExecute在主ui线程上运行。若您这样做,那个么UI将冻结,直到Http post请求未完成
还是有更好的办法
从Geocoder获得地址后,向doInBackground发出post请求。我很确定您的方式是最好的。正如您所评论的,您需要等到onPost才能使用截击,所以没有办法解决。无论如何,volley使用它自己的多线程,所以它不会锁定任何东西 一般来说,由于收音机的电池成本,最好尽量减少http请求,但在这种情况下,它是应用程序功能的关键,因此没有办法解决 顺便说一句,对于阅读这个问题并对截击感兴趣的人来说-
希望这有帮助 我使用的是Volley库,所以post也是在后台线程中运行的。我无法从doInBackground运行它,因为它是异步的,而且我知道地址列表填充的唯一时间是在OnPostExecute中,这段代码中的两个连续http请求在哪里?我只看到一个@Lefteris-VolleyHelper.postrequest、AppConstants.URL.FAVORITES、GetFavoriteSAccess、getFavoritesError、progDialog;这就是我看到的请求。第二个在哪里?@Lefteris-GeoCoder.getFromLocationName实际上发出了一个http请求。如果您在postExecute上运行截取请求,则表示第一个请求已完成。就我所知,这里没有什么问题