0

LatitudeLongitudeが変更されるたびに、古いマーカーを上書きするのではなく、新しいマーカーが作成されるため、マーカーで問題が発生しています。私は複数のマーカーを取り込んでいるので、それをArrayListの中に保存しました。 また、私のString busRouteint passengerはnullになります。だからここに私のコードです。誰かが私の問題を理解できることを願っています。前のマーカーとマーカーの情報を削除しました

private String name, busNum, busRoute, currentLocation, estimatedTime, availableSeat, lat, lng; 
double latitude, longitude; 
int passenger; 

public void markerDriver() { 
    markerArray = new ArrayList<>(); 
    Firebase ref = new Firebase(Config.FIREBASE_URL_DRIVER); 
    ref.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (dataSnapshot.getChildrenCount() == 0) { 
       markerInfo(); 
      } else { 
       for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
        if (snapshot.child("availableSeat").exists() && snapshot.child("latitude").exists() && snapshot.child("longitude").exists() && snapshot.child("estimatedTime").exists()) { 
         name = snapshot.child("driversName").getValue().toString().trim(); 
         busNum = snapshot.child("busNum").getValue().toString().trim(); 
         lat = snapshot.child("latitude").getValue().toString().trim(); 
         lng = snapshot.child("longitude").getValue().toString().trim(); 
         availableSeat = snapshot.child("availableSeat").getValue().toString().trim(); 
         estimatedTime = snapshot.child("estimatedTime").getValue().toString().trim(); 
         latitude = Double.valueOf(lat); 
         longitude = Double.valueOf(lng); 

         convertLatLong(); 
         getTotalPass(); 
         markerArray.add(new Driver(name, busNum, busRoute, passenger, latitude, longitude, currentLocation, estimatedTime)); 
        } 
       } 
       for (i = 0; i < markerArray.size(); i++) { 
        createMarker(markerArray.get(i).getDriversName(), markerArray.get(i).getBusNum(), markerArray.get(i).getRoute(), markerArray.get(i).getTotalPassenger(), markerArray.get(i).getLatitude(), markerArray.get(i).getLongitude(), markerArray.get(i).getLocation(), markerArray.get(i).getEstimatedTime()); 
       } 
      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      Toast.makeText(MainMapActivity.this, "markerDriver: " + firebaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 

public void convertLatLong() { 
    Geocoder geocoder; 
    List<android.location.Address> addresses; 
    geocoder = new Geocoder(this, Locale.getDefault()); 

    try { 
     addresses = geocoder.getFromLocation(latitude, longitude, 1); 
     if (addresses.get(0).getAddressLine(0) != null) { 
      currentLocation = addresses.get(0).getAddressLine(0) + ", " + addresses.get(0).getLocality(); 
     } else { 
      currentLocation = addresses.get(0).getLocality(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public void getTotalPass() { 
    busRef = new Firebase(Config.FIREBASE_URL_BUSNUMBER); 
    Query bus = busRef.orderByChild("busNum").equalTo(busNum); 
    bus.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
       passenger = Integer.valueOf(snapshot.child("capacity").getValue().toString().trim()) - Integer.valueOf(availableSeat); 
       busRoute = snapshot.child("route").getValue().toString().trim(); 
       Toast.makeText(MainMapActivity.this, "routeGetTotalPass: " + busRoute + ":::" + passenger, Toast.LENGTH_SHORT).show(); 
      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      Toast.makeText(MainMapActivity.this, "getTotalPass: " + firebaseError.getMessage(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

createMarker

protected void createMarker(String driversName, final String busNum, String route, final int totalPass, double latitude, double longitude, String location, String estimatedTime) { 
    Marker marker = mMap.addMarker(new MarkerOptions() 
      .position(new LatLng(latitude, longitude)) 
      .title(location) 
      .snippet("Driver's Name: " + driversName + "\nBus number: " + busNum + "\nRoute: " + route + "\nTotal Passenger: " + totalPass + "\nEstimated time: " + estimatedTime)); 
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
     @Override 
     public boolean onMarkerClick(com.google.android.gms.maps.model.Marker marker) { 
      dialogInfo(marker); 
      return true; 
     } 
    }); 
} 
+0

あなたcreateMarker方法が同様に表示することができますか? –

+0

@ArjunGurung最新の質問をご覧ください。私はすでにcreateMarkerメソッドを置いています。 – tin

答えて

0

まずを変更するには、特定の削除したい場合は、これは私

+0

こんにちはarjun、私は私のmarkerArrayに 'POJO'を保存しています。あなたが上記のコードで見ることができるように、私はPOJOモデル 'Driver'を持っています – tin

+1

@tin私は答えを更新しました... –

+0

こんにちはarjun、そのmarkerList内のデータを追加する方法のサンプルコードを教えてください? – tin

0

の前に追加し、古いマーカーを削除し、新たなマーカー

    if (marker != null) { 
        marker.remove(); 
        } 
        convertLatLong(); 
        getTotalPass(); 
        markerArray.add(new Driver(name, busNum, busRoute, passenger, latitude, longitude, currentLocation, estimatedTime)); 

別の方法は、明確なGoogleマップが前に新しいマーカーを追加で

googleMap.clear(); 

oncreate before宣言

マーカーマーカー;

、その後、あなたの方法を変更するマーカー ArrayList<Marker> markerList=new ArrayList<>(); のリストを宣言

protected void createMarker(String driversName, final String busNum, String route, final int totalPass, double latitude, double longitude, String location, String estimatedTime) { 
marker = mMap.addMarker(new MarkerOptions() 
     .position(new LatLng(latitude, longitude)) 
     .title(location) 
     .snippet("Driver's Name: " + driversName + "\nBus number: " + busNum + "\nRoute: " + route + "\nTotal Passenger: " + totalPass + "\nEstimated time: " + estimatedTime)); 
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
    @Override 
    public boolean onMarkerClick(com.google.android.gms.maps.model.Marker marker) { 
     dialogInfo(marker); 
     return true; 
    } 
}); 
} 
+0

私はすでに 'googleMap.clear();'を試しましたが、全くマーカーを返しません – tin

+0

フルコードを投稿 – sasikumar

+0

あなたのコードでは、新しいマーカーを作成するたびにマーカーマーカーを変更することがグローバル変数 – sasikumar

0

のために働いている

protected void createMarker(String driversName, final String busNum, String route, final int totalPass, double latitude, double longitude, String location, String estimatedTime) { 
    boolean isOld = false; 
    for (Marker m:markerList) { 
     if (m.getTitle().equals(location)) { 
      m.setPosition(new LatLng(latitude, longitude)); 
      isOld=true; 
      break; 
     } 
    } 
    if (!isOld) { 
     Marker marker = mMap.addMarker(new MarkerOptions() 
       .position(new LatLng(latitude, longitude)) 
       .title(location) 
       .snippet("Driver's Name: " + driversName + "\nBus number: " + busNum + "\nRoute: " + route + "\nTotal Passenger: " + totalPass + "\nEstimated time: " + estimatedTime)); 
    markerList.add(marker); 
    } 
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { 
     @Override 
     public boolean onMarkerClick(com.google.android.gms.maps.model.Marker marker) { 
      dialogInfo(marker); 
      return true; 
     } 
    }); 
} 

にマーカーを作成しますマーカオブジェクトをマーカオブジェクトとして使用し、インデックスハッシュマップをインデックスidに基づいて削除することができます。もっとこれを確認するために

からhttps://stackoverflow.com/a/35363423/2128166

0

私は次のコードでそれを作った:

final WeakHashMap<String,Marker> obj = new WeakHashMap<>(); 

    mRootRef.child("Coordinates/" + mRequestID) 
    .addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      Coordinates coordinates = dataSnapshot.getValue(Coordinates.class); 
      final String lat = coordinates.getLatitude(); 
      final String lng = coordinates.getLongitude(); 

      latLng1 = new LatLng(Double.valueOf(lat), Double.valueOf(lng)); 
      markerOptions = new MarkerOptions() 
        .position(latLng1); 


      mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng1, 15)); 
      mapa.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null); 

      Marker marker = mapa.addMarker(markerOptions); 
      marker.setSnippet(dataSnapshot.getKey()); 
      marker.showInfoWindow(); 

      // Here is where I create the unique marker identification 
      obj.put(dataSnapshot.getKey(), marker); 


     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 


       Coordinates coordinates = dataSnapshot.getValue(Coordinates.class); 
     final String lat = coordinates.getLatitude(); 
     final String lng = coordinates.getLongitude(); 

     latLng1 = new LatLng(Double.valueOf(lat), Double.valueOf(lng)); 
     markerOptions = new MarkerOptions().position(latLng1); 

     // Now, it's just needed to update its new position 
     obj.get(dataSnapshot.getKey()).setPosition(latLng1); 

     mapa.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng1, 15)); 
     mapa.animateCamera(CameraUpdateFactory.zoomTo(15), 2000, null); 


     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
関連する問題