我正在使用geofire库从特定区域中的firebase3加载数据,但是当我向数据库中添加新标记并检查地图时,我发现多个标记已添加到同一latlng坐标中,我的问题是如何防止标记在同一坐标中重复。 这是Geofire方法:
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
try{
items.add(new MyItem(location.latitude, location.longitude));
Log.d("onKey","called");
}catch (ClassCastException e){
Log.d("classCastException","");
}
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
parseJsonToList();
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
ParseJsonToList方法:
private void parseJsonToList() {
itemss = clusterManagerAlgorithm.getItems();
try {
items.removeAll(itemss);
}catch (IndexOutOfBoundsException e){
Log.d("itemsDoesn't exist"," : ");
}
mClusterManager.clearItems();
mClusterManager.cluster();
mClusterManager.addItems(items);
Log.d("items"," : " + items);
}
答案 0 :(得分:0)
根据您发布的代码,两点可能是问题的根源。
首先,它是GeoQueryEventListener.onKeyEntered()
的多次调用,要解决此问题,您可以采用以下解决方法:
try{
MyItem myItem = new MyItem(location.latitude, location.longitude);
if (!items.contains(myItem)) {
items.add(myItem);
}
Log.d("onKey","called");
}catch (ClassCastException e){
Log.d("classCastException","");
}
第二,也许您忘记重写equals()
类的hashcode()
和MyItem
方法。因此,当您拨打items.removeAll(itemss);
时,没有一项被删除。
在两种情况下,都需要equals()
类的重写hashcode()
和MyItem
方法。在AndroidStudio中使用the autogenerating function很容易。