我正在从用户那里获得一个地址,我正在使用GeoCoder来获取lat / lng。
获取lat / lng后,我需要向我的服务器发送POST请求以保存数据(使用Volley)。
我正在AsyncTask中运行GeoCoder请求,并在onPostExecute
回调中运行发布请求。
这是正确的方法还是有更好的方法?
这是我的代码:
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!!!");
}
}
}
答案 0 :(得分:0)
我很确定你的方式是最好的。正如你评论的那样,你需要等到onPost才能使用凌空,所以无法绕过它。无论如何,凌空使用自己的多线程,所以它不会锁定任何东西。
一般情况下,由于收音机的电池成本最大限度地减少http请求,但在这种情况下,它是应用程序功能的关键,因此无法绕过它。
顺便说一句,对于任何阅读这个问题并对排球感到好奇的人来说 - http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/
希望这会有所帮助;)
答案 1 :(得分:-2)
我在AsyncTask中运行GeoCoder请求并运行帖子 请求onPostExecute回调。
这是正确的方法吗
不,因为onPostExecute
在主ui线程上运行。如果你这样做,那么UI将冻结,直到Http post请求没有完成。
还是有更好的方法吗?
从post
获取doInBackground
后,addresses
发出Geocoder
次请求。