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更新。否则,如果您不希望从服务器端进行这些更改,则可以在成功响应时更新标记。