Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:连续发出2个http请求_Android_Android Asynctask_Android Volley - Fatal编程技术网

Android:连续发出2个http请求

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

我从用户那里得到了一个地址,我用它来获取lat/lng

获取lat/lng后,我需要向服务器发送POST请求,以使用保存数据

我在一个中运行GeoCoder请求,在onPostExecute回调中运行post请求

这是正确的方法还是有更好的方法

这是我的密码:

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上运行截取请求,则表示第一个请求已完成。就我所知,这里没有什么问题