从FusedLocationClient获取位置详细信息,然后使用Volley发送到服务器

时间:2019-01-03 15:43:26

标签: android

如何将FusedClient提供的纬度和经度发送到Volley中的getParams方法,如果两者都超出范围?

这是我从FusedClient获取位置的方法:

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5000);
mLocationRequest.setFastestInterval(2000);  
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationCallback = new LocationCallback() {

@Override
    public void onLocationResult(LocationResult locationResult) {
        if (locationResult == null) {
        return;
    }
    for (Location location : locationResult.getLocations()) {
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        }
    }
};

这是我使用Volley将POST参数发送到远程服务器的方式:

 StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Log.d(TAG,"Response: " + response);

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.d(TAG,"That didn't work!");
        }
    }) {
        @Override
        public Map getParams() {
            Map params = new HashMap();
            //How to put latitude and longitude in this map?

            return params;
        }
    };

1 个答案:

答案 0 :(得分:0)

几件事:

  1. 将HashMap设置/实例化为静态/类成员,可以在getParamsonLocationResult中进行访问。
  2. 在与HashMap相同的类中将一个int声明为static/class成员。
  3. onLocationResult中的地图填充为

    myStaticHashMap.put("lat_" + myStaticInteger, location.getLatitude());
    myStaticHashMap.put("lang_" + myStaticInteger, location.getLongitude());
    ++myStaticInteger;
    
  4. 在函数getParams中,返回myStaticHashMap
  5. 不确定如何或是否在程序中使用线程。如果是这样,则需要synchronise对静态成员vars的访问。