每1分钟GPS LatLong从服务器显示在地图上作为标记。但标记重复 [英] Every 1 Minute Gps LatLong Getting From Server Showing In Map as Marker. But Marker Geting Duplicating

查看:206
本文介绍了每1分钟GPS LatLong从服务器显示在地图上作为标记。但标记重复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

1.在我的应用程序中, Gps LatLong 是从服务器获取EveryMinute。保存在共享首选项中,然后获取 LatLong 来自共享pref显示标记图



2.每一分钟我想根据LatLong移动标记。



3.But 改变标记位置时。获取重复



请帮我解决此问题。



里面创建方法我在下面的代码段中调用了每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();

$ b catch(例外e)
{
e.printStackTrace();
}

方法Iam USing:

  private void display_Location()
{

try
{

mLastLocation = LocationServices.FusedLocationApi。 getLastLocation(mGoogleApiClient);

if(mLastLocation!= null)
{
/ *当前位置ping从这里开始* /

//从会话获取用户数据
HashMap< String,String> user = session.getGPSPING();

// UserLat
字符串LatLongUser =;
LatLongUser = user.get(SessionManagerFor_Register.KEY_LATLONG);




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

Log.i(MAP LatLong上的PING,LatLongUser);

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



int length = Lanlonglist1.size();
$ b $ / * ArrayList用于添加单个(Concating)中的所有ArrayList项* /


arraylist_DetailLineWalker = new ArrayList< String>(length);

for(int i = 0; i

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

$ b $ if(arraylist_DetailLineWalker!= null)
{

//初始化
LineWalkermMarkers_arr = new ArrayList< Marker>();
//只是删除旧的Wlaker
if(LineWalkermMarkers_arr!= null){
// LineWalker_marker1.remove();
RemoveLineWalkerMarkers();

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


$ b 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(检查STarted LatLong ::+ LatLong_DataSaveTable);

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

//保存位置
LatLng latLng1 =新LatLng(latitude1,longitude2);
//在地图中创建标记
MarkerOptions markerOptionsLineWalker = new MarkerOptions();
markerOptionsLineWalker.position(latLng1); //设置位置
markerOptionsLineWalker.draggable(true); //使标记可拖动
markerOptionsLineWalker.title(USER LOCAITON);




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



//将标记添加到地图
// 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();



$ b}其他{
Log.i(MAP NEwLatLong,TOTAL ARRY LIST NULLL);



$ b else
{
Log.i(MAP NEwLatLong,Null Not LatLong);

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


}
else
{

Log.i(Location EXception,Could not get确保位置在设备上启用);
//无法获取位置
// GPS或网络未启用
//请求用户在设置中启用GPS /网络
gps.showSettingsAlert();


catch(Exception ex)

ex.printStackTrace();




$ *删除Linewalker * /
private void RemoveLineWalkerMarkers()
{$ b $ (Marker marker:LineWalkermMarkers_arr)
{
marker.remove();
}
LineWalkermMarkers_arr.clear();


解决方案

初始化 LineWalkermMarkers_arr 执行 LineWalkermMarkers_arr = new ArrayList< Marker>(); 之后的$ c> RemoveLineWalkerMarkers()

在删除标记后,只需初始化 LineWalkermMarkers_arr / p>

  if(LineWalkermMarkers_arr!= null){
RemoveLineWalkerMarkers();
Log.i(TAG,LineWalker REMOVED .............................);
}
LineWalkermMarkers_arr = new ArrayList< Marker>();作为一个方面说明,您应该遵循Java代码约定(变量和方法名称应该以小写开头)。您可以在此处此处


1.In My app Gps LatLong is Getting from Server Every OneMinute. Saved in Shared Pref ,then getting the LatLong From shared pref Showing the Marker on the Map.

2.Every One Minute I want to Move the Marker based on the LatLong.

3.But While Changing the Marker Location. Getting Duplicates.

Please Help me to Solve this Issue.

Inside Oncreate method i Called below Snippet in Every 60 Secs for Calling a Method.

 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();
        }

Method Iam USing:

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();
    }

解决方案

You are calling RemoveLineWalkerMarkers() after initializing LineWalkermMarkers_arr doing LineWalkermMarkers_arr = new ArrayList<Marker>();, so you are never removing your markers.

Just initialize your LineWalkermMarkers_arr after removing the markers:

if (LineWalkermMarkers_arr != null) {
    RemoveLineWalkerMarkers();
    Log.i(TAG, "LineWalker REMOVED.............................");
}
LineWalkermMarkers_arr = new ArrayList<Marker>();

As a side note, you should follow the Java code conventions (variables and method names should start with lowercase). You can find good guides here and here

这篇关于每1分钟GPS LatLong从服务器显示在地图上作为标记。但标记重复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆