Android 使用纬度和经度从服务器移动多个标记

Android 使用纬度和经度从服务器移动多个标记,android,google-maps,google-maps-markers,tracking,Android,Google Maps,Google Maps Markers,Tracking,单个标记可以完美地移动,但当添加多个标记时,它无法正常工作 StringRequest stringRequest = new StringRequest(Request.Method.GET, Url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.e("GET_ASSIGNED_PROJE

单个标记可以完美地移动,但当添加多个标记时,它无法正常工作

  StringRequest stringRequest = new StringRequest(Request.Method.GET, Url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.e("GET_ASSIGNED_PROJECT", response);
            try {
                progressDialog.dismiss_dialog();
                JSONObject jsonObject1 = new JSONObject(response);
                message = jsonObject1.getString("message");
                if (message.equals("success")) {
                    startTimer();
                    JSONArray jsonArray = jsonObject1.getJSONArray("responseMessg");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        ManagementHomeModel homePageModel = new ManagementHomeModel();
                        homePageModel.setRegistrationid(jsonObject.getString("Registrationid"));
                        homePageModel.setName(jsonObject.getString("Name"));
                        homePageModel.setImageUrl(jsonObject.getString("ImageUrl"));
                        homePageModel.setLatitude(Double.parseDouble(jsonObject.getString("Latitude")));
                        homePageModel.setLongitude(Double.parseDouble(jsonObject.getString("Longitude")));
                        double weblat = jsonObject.getDouble("Latitude");
                        double weblong = jsonObject.getDouble("Longitude");

                        latLng = new LatLng(weblat, weblong);

                        Glide.with(getContext()).load(ServiceUrl.IMAGE_OPEN_URL + jsonObject.getString("ImageUrl")).asBitmap().fitCenter().into(new SimpleTarget<Bitmap>() {
                            @Override
                            public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
                                webmarker = new MarkerOptions().position(new LatLng(weblat, weblong)).icon(BitmapDescriptorFactory.fromBitmap(getMarkerBitmapFromView(mCustomMarkerView, bitmap)));
                                cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, 10);
                                mMap.animateCamera(cameraUpdate);
                                finalmarker = mMap.addMarker(webmarker);
                                allManagementHomeModels.add(homePageModel);
                                allHashmarker.put(finalmarker, homePageModel);
                            }
                        });
                    }

                } else {

                    JSONObject object = jsonObject1.getJSONObject("responseMessg");
                    String responceresult = object.getString("ResposeResult");
                    Toast.makeText(getContext(), responceresult, Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("error", error.getMessage());
            progressDialog.dismiss_dialog();
        }
    });
    stringRequest.setRetryPolicy(new DefaultRetryPolicy(20000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    RequestQueue requestQueue = Volley.newRequestQueue(getContext());
    requestQueue.add(stringRequest);




    final long start = SystemClock.uptimeMillis();
    final Interpolator interpolator = new AccelerateDecelerateInterpolator();
    final float durationInMs = 3000;
    final boolean hideMarker = false;
    handler.post(new Runnable() {
        long elapsed;
        float t;
        float v;

        @Override
        public void run() {


            moveMarker = (new ArrayList<Marker>(allHashmarker.keySet())).get(pos);

            ManagementHomeModel model = (new ArrayList<ManagementHomeModel>(allHashmarker.values())).get(pos);
            startPosition = moveMarker.getPosition();

            elapsed = SystemClock.uptimeMillis() - start;
            t = elapsed / durationInMs;
            v = interpolator.getInterpolation(t);

            LatLng currentPosition = new LatLng(
                    startPosition.latitude * (1 - t) + (finalPosition.getLatitude()) * t,
                    startPosition.longitude * (1 - t) + (finalPosition.getLongitude()) * t);
            moveMarker.setPosition(currentPosition);


            if (t < 1) {
                // Post again 16ms later.
                handler.postDelayed(this, 16);

            } else {
                if (hideMarker) {
                    finalmarker.setVisible(false);
                } else {
                    finalmarker.setVisible(true);
                }
            }
        }
    });
}
StringRequest-StringRequest=new-StringRequest(Request.Method.GET,Url,new-Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.e(“获得分配的项目”,回复);
试一试{
progressDialog.Disclose_dialog();
JSONObject JSONObject 1=新JSONObject(响应);
message=jsonObject1.getString(“message”);
if(message.equals(“success”)){
startTimer();
JSONArray JSONArray=jsonObject1.getJSONArray(“responseMessg”);
for(int i=0;i公共资源就绪(位图位图,GlideAnimation在google map中添加标记时,在列表中添加所有标记。然后,无论何时需要更新标记的位置,只要从列表中找到当前标记并更新位置即可。

我每3秒打一次服务器,以获取最新的lat-long代码。您能告诉流程何时调用服务器以及何时调用服务器吗更新?您应该使用套接字连接通道来实时更新标记。您也可以在服务器上使用MQTT通道来进行此类实时maker更新。否则,如果您不希望从服务器端进行这些更改,则可以在成功响应时更新标记。