Android 每1分钟Gps LatLong从服务器获取一次,在地图上显示为标记。但是标记获取复制

Android 每1分钟Gps LatLong从服务器获取一次,在地图上显示为标记。但是标记获取复制,android,google-maps,gps,google-maps-android-api-2,Android,Google Maps,Gps,Google Maps Android Api 2,1.在我的应用程序中,Gps LatLong每一分钟从服务器获取一次。保存在共享Pref,然后从共享Pref获取LatLong,在地图上显示标记 2.每一分钟我都要根据LatLong移动标记 3.但在更改标记位置时。获取重复项 请帮我解决这个问题 在Oncreate方法中,我每60秒调用一次下面的代码片段来调用一个方法 try { Thread t = new Thread() { @Overrid

1.在我的应用程序中,Gps LatLong每一分钟从服务器获取一次。保存在共享Pref,然后从共享Pref获取LatLong,在地图上显示标记

2.每一分钟我都要根据LatLong移动标记

3.但在更改标记位置时。获取重复项

请帮我解决这个问题

Oncreate方法中,我每60秒调用一次下面的代码片段来调用一个方法

 try
        {
            Thread t = new Thread()
            {
                @Override
                public void run()
                {
                    try
                    {
                        while (!isInterrupted())
                        {
                            Thread.sleep(60*1000);
                            getActivity().runOnUiThread(new Runnable()
                            {
                                @Override
                                public void run()
                                {

                                    display_Location();
                                    Log.i("Every 60 Second","Current  Called..");

                                }
                            });
                        }
                    } catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            };
            t.start();

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
方法Iam使用:

private void display_Location()
    {

        try
        {

            mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

            if (mLastLocation != null)
            {
        /*For Current Location ping Starts Here*/

                // get user data from session
                HashMap<String, String> user = session.getGPSPING();

                // UserLat
                String LatLongUser = "";
                LatLongUser = user.get(SessionManagerFor_Register.KEY_LATLONG);




                if (!LatLongUser.equals("") || LatLongUser != null)
                {

                    Log.i(" PING on MAP LatLong", LatLongUser);

                    String[] LanlongArr = LatLongUser.split("//");
                    List<String> Lanlonglist1 = Arrays.asList(LanlongArr);



                    int length = Lanlonglist1.size();

/*ArrayList For adding All ArrayList items in Single(Concating)*/


                    arraylist_DetailLineWalker = new ArrayList<String>(length);

                    for (int i = 0; i < length; i++) {


                        arraylist_DetailLineWalker.add(Lanlonglist1.get(i) 
                              );
                    }

                    if (arraylist_DetailLineWalker != null)
                    {

                        // Initializing
                        LineWalkermMarkers_arr = new ArrayList<Marker>();
                        //   just Remove Older Line Wlaker
                        if (LineWalkermMarkers_arr != null) {
                            // LineWalker_marker1.remove();
                            RemoveLineWalkerMarkers();

                            Log.i(TAG, "LineWalker REMOVED.............................");
                        }


                        for (int i = 0; i < arraylist_DetailLineWalker.size(); i++)
                        {
                            try 
                            {
                                String Val = arraylist_DetailLineWalker.get(i).toString();
                                //Log.i(" Validation Id",Val);
                                VALUE_ARRAY_STRING = Val.toString().split("::");

                                LatLong_DataSaveTable = VALUE_ARRAY_STRING[0].toString();



                                System.out.println("checking STarted LatLong::" + LatLong_DataSaveTable);

                                String[] latlong = LatLong_DataSaveTable.split(",");
                                double latitude1 = Double.parseDouble(latlong[0]);
                                double longitude2 = Double.parseDouble(latlong[1]);

                                //To hold location
                                LatLng latLng1 = new LatLng(latitude1, longitude2);
                                //To create marker in map
                                MarkerOptions markerOptionsLineWalker = new MarkerOptions();
                                markerOptionsLineWalker.position(latLng1); //setting position
                                markerOptionsLineWalker.draggable(true); //Making the marker draggable
                                markerOptionsLineWalker.title("USER LOCAITON");




                                    markerOptionsLineWalker.icon(BitmapDescriptorFactory.fromResource(R.drawable.walker_outof_fence_icon_red));



                                //adding marker to the map
                                // googleMap.addMarker(markerOptionsLineWalker);
                                LineWalker_marker1 = googleMap.addMarker(markerOptionsLineWalker);

                                LineWalkermMarkers_arr.add(LineWalker_marker1);
                                // LineWalker_marker1.setPosition(latLng1);
                                Log.i(TAG, " NEW Line Walkers PING Added.............................");

                            } catch (NumberFormatException e) {
                                e.printStackTrace();
                            }

                        }

                    } else {
                        Log.i("MAP NEwLatLong", "TOTAL ARRY LIST NULLL");
                    }


                }
                else
                {
                    Log.i("MAP NEwLatLong", "Null Not LatLong");

                    Toast.makeText(getActivity(), "Lat Long Not Available..!", Toast.LENGTH_SHORT).show();
                }


            }
            else
            {

                Log.i("Location EXception", "Couldn't get the location. Make sure location is enabled on the device");
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gps.showSettingsAlert();
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }

    }


    /*Remove the Linewalker*/
    private void RemoveLineWalkerMarkers()
    {
        for (Marker marker: LineWalkermMarkers_arr)
        {
            marker.remove();
        }
        LineWalkermMarkers_arr.clear();
    }
private void display\u Location()
{
尝试
{
mLastLocation=LocationServices.FusedLocationApi.getLastLocation(mgoogleapClient);
如果(mLastLocation!=null)
{
/*对于当前位置,ping从这里开始*/
//从会话获取用户数据
HashMap user=session.getGPSPING();
//UserLat
字符串LatLongUser=“”;
LatLongUser=user.get(sessionmanager for_Register.KEY_LATLONG);
如果(!LatLongUser.equals(“”| | LatLongUser!=null)
{
Log.i(“LatLong地图上的PING”,LatLongUser);
字符串[]LanlongArr=LatLongUser.split(“/”);
List Lanlonglist1=Arrays.asList(LanlongArr);
int length=Lanlonglist1.size();
/*ArrayList,用于在单个列表中添加所有ArrayList项(Concating)*/
arraylist_DetailLineWalker=新的arraylist(长度);
for(int i=0;i
在初始化
linewalkermarkers\u arr
执行
linewalkermarkers\u arr=new ArrayList()之后,您正在调用
RemoveLineWalkerMarkers(),因此您永远不会删除标记

删除标记后,只需初始化您的
linewalkermarkers\u arr
if (LineWalkermMarkers_arr != null) {
    RemoveLineWalkerMarkers();
    Log.i(TAG, "LineWalker REMOVED.............................");
}
LineWalkermMarkers_arr = new ArrayList<Marker>();
if(mGoogleMap != null) {
        mGoogleMap.clear();
 }
//With your logic , this check should be done
if(arraylist_DetailLineWalker.size()>0){
   RemoveLineWalkerMarkers();
}
LineWalkermMarkers_arr = new ArrayList<Marker>();
for (int i = 0; i < arraylist_DetailLineWalker.size(); i++)
{
}
    private Marker mCurrentMarker;
    private float ZOOMLEVEL=18.0f;
    private LatLng previousLatLon;
    private Handler mLocalHandler;
    private GoogleMap mGoogleMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mLocalHandler = new Handler();
        previousLatLon=new LatLng(45.320372, 2.460161);
        //Initialize Marker once Google Map object is created
        mMarkerOptions = new MarkerOptions().icon(BitmapDescriptorFactory.fromResource(R.drawable.custom_marker_icon));
        mMarkerOptions.position(previousLatLon);
        mCurrentMarker = mGoogleMap.addMarker(mMarkerOptions);


    }

    /**
     * Call this method to move marker in map to new location in map with updated location
     * @param marker
     * @param toPosition
     * @param fromPosition
     */
    public void animateMarker(final Marker marker, final LatLng toPosition,final LatLng fromPosition) {


        final long duration = 500;
        final Interpolator interpolator = new LinearInterpolator();

        mLocalHandler.post(new Runnable() {
            @Override
            public void run() {
                long elapsed = SystemClock.uptimeMillis() - mStartTime;
                float t = interpolator.getInterpolation((float) elapsed
                        / duration);
                marker.setPosition(toPosition);
                marker.setAnchor(Constants.MAPANCHOR, Constants.MAPANCHOR);
                mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(toPosition, ZOOMLEVEL));
                if (t < 1.0) {
                    // Post again 16ms later.
                    mLocalHandler.postDelayed(this, 16);
                } else {
                    marker.setVisible(true);
                }
                }
            }
        });
        previousLatLon=toPosition;// reassign the previous location to current location
    }
if(arraylist_DetailLineWalker != null && arraylist_DetailLineWalker.size()>0){
    arraylist_DetailLineWalker.clear()
    mMap.clear();
    showMarker();
}