2

我在我的应用程序中使用谷歌地图。我在数据库中存储经纬度和测试类型。我正在从数据库中检索这些值,并在Google地图上显示为标记。我使用两种不同的图像进行测试。如果测试类型是手动的,那么如果测试类型为auto,则使用红色图像,然后我使用蓝色图像。更新谷歌地图标记

这里是我的代码对谷歌地图

public void setPinOnMap(){ 
     try{ 

      Cursor pinRecordCursor = mTestPinRecordHandler.getPinFromDatabase(); 
      mPinMarkerList = new ArrayList<TestPinMarker>(); 
      if(pinRecordCursor != null && pinRecordCursor.moveToFirst()) 
      { 
       do 
       {//String testName, String testType, String latitude, String longitude 
        TestPinMarker markers = new TestPinMarker(pinRecordCursor.getString(1),pinRecordCursor.getString(2), 
          pinRecordCursor.getString(3),pinRecordCursor.getString(4)); 
        mPinMarkerList.add(markers); 
       }while(pinRecordCursor.moveToNext()); 
       pinRecordCursor.close(); 
       for (TestPinMarker mm : mPinMarkerList) { 
        mMap.addMarker(mm.getMarkerOption()); 
       } 
       Thread.sleep(300); 
      } 
     } 
     catch(Exception e) 
     { 
      mLogger.printLog("pin", "Exception in MapHandler-->setPinOnMap"); 
      mLogger.printLog("pin", e.getMessage()); 
     } 
    } 

我打电话onCreate()方法这个方法,我使用处理器

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    Log.d("MAP","Coming inside on onCreate()"); 
    mTestPinRecordHandler = new TestPinRecordHandler(getApplicationContext()); 
    mLogger = new Logger(); 
    setContentView(R.layout.activity_map_sample); 

    try{ 
     mPlayServiceStatus = checkGooglePlayServicesAvailability(); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Kindly update the Google Play service"); 
    } 
    String lPreviousZoomLevelString = Config.getSetting(getApplicationContext(), "MAPZOOMLEVEL"); 
    if(lPreviousZoomLevelString == null || lPreviousZoomLevelString.length() == 0) 
    { 
     Config.setSetting(getApplicationContext(), "MAPZOOMLEVEL", Float.toString(mPreviousZoomLevel)); 
    } 
    if(mPlayServiceStatus) 
    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapView)).getMap(); 
//  mMap.setMyLocationEnabled(true); 
    Log.d("MAP","Coming inside on onCreate()"); 
    /**Add pin to map */ 
    setPinOnMap(); 
mHandler = new Handler(); 
    if(mPlayServiceStatus){ 
     mHandler.removeCallbacks(updateCenterTask); 
     mHandler.postDelayed(updateCenterTask, 100); 

每次更新值获取价值和展示这是我的处理代码

private Runnable updateCenterTask = new Runnable(){ 

    @Override 
    public void run() { 

     // TODO Auto-generated method stub 
     try{ 
      if(mMap==null) 
       mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapView)).getMap(); 
      try{ 
       GPSListener.UseLastKnownLocation(); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 
      Log.d("MAP","coming inside map update task"); 
      setPinOnMap(); 
      mCurrentLattitude = mGPSListener.GetLatitudeRaw(); 
      mCurrentLongitude = mGPSListener.GetLongitudeRaw(); 
      Log.d("MAP","lat-lang values: "+mCurrentLattitude +" : "+mCurrentLongitude); 
      LatLng coordinates = new LatLng(mCurrentLattitude, mCurrentLongitude);    
      CameraUpdate center= CameraUpdateFactory.newLatLng(coordinates); 
      mMap.moveCamera(center); 
      String lPreviousZoomLevelString = Config.getSetting(getApplicationContext(), "MAPZOOMLEVEL"); 
      mPreviousZoomLevel = Float.parseFloat(lPreviousZoomLevelString); 
      Log.d("MAP","mPreviousZoomLevel value: "+ mPreviousZoomLevel); 
      CameraUpdate zoom=CameraUpdateFactory.zoomTo(mPreviousZoomLevel); 
      mMap.animateCamera(zoom); 

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

     } 
     finally 
     { 
      /** Thread is called after a delay period **/ 
      mHandler.postDelayed(updateCenterTask, 5000); 
     } 

    }}; 

我能够显示标记唯一的问题,如果我perfo rm测试然后来到MapActivity,它每次更新值都会在数据库中更新。如果我在MapActivity上执行相同的过程。它不更新旧标记图像(红色)与新标记(蓝色)

我的意思是我已经进行了手动测试。来到MapActivity它显示红色别针。这很好。如果我执行自动测试(从MapActivity)现在它应该更新红色引脚蓝色引脚,但它不会更新,如果我点击引脚显示两个引脚一个接一个。但如果我切换到其他活动并返回到地图活动,则只显示蓝色。

回答

3

也许在添加标记之前,您应该清除旧标记? map.clear();

+0

是的,我已经解决了,但任何方式感谢您的回应:) – CodingRat