Android:连续2次发出http请求

时间:2014-01-12 15:09:50

标签: android android-asynctask android-volley

我正在从用户那里获得一个地址,我正在使用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!!!");
            }

        }

    }

2 个答案:

答案 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次请求。