gpt4 book ai didi

android - 将标记的标题与从 FirebaseDatabase 获取的字符串进行比较后,无法从标记数组和 map 中删除标记

转载 作者:搜寻专家 更新时间:2023-11-01 08:29:25 27 4
gpt4 key购买 nike

我在 map 上添加了几个 (2-13) 个标记。标记不会一次全部添加,而是从 Firebase 监听数据变化。如果添加了新用户,则会在 map 上添加一个带有他所在位置的标记。

方法如下:

public void addMarkers() {
mMap.clear();
vMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.parseDouble(vLat), Double.parseDouble(vLng))).title("Title" + v.trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
markersList.add(venueMarker);
for (int i=0; i<nP.size(); i++) {
pMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(Double.valueOf(cLatP.get(i)), Double.valueOf(cLngP.get(i)))).title(nP.get(i).trim()).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
markersList.add(pMarker);
}
}

这是如何nP , cLatPcLngP正在获取分配给它们的值以及我如何尝试删除标记:

    aReference.child(rID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.getValue() != null) {
aReference.child(rID).child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

if (dataSnapshot.getValue() != null) {

if (dataSnapshot.hasChild("pName") && dataSnapshot.hasChild("currentLat") && dataSnapshot.hasChild("currentLng")) {
Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
nP.add(map.get("pName"));
cLatP.add(map.get("currentLat").trim());
cLngP.add(map.get("currentLng").trim());
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
addMarkers();
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setMapToolbarEnabled(true);
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mMap.setMaxZoomPreference(19.0f);
mMap.setMyLocationEnabled(true);
}
});

}

}

}
...
});

if (pA != null) {
pA.clear();
}
// below is how I'm trying to remove markers
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
Map<String, String> map = (Map<String, String>) childSnapshot.getValue();
pA.add(map.get("pName"));
if (markersList.size() > 0) {
for (int i = 0; i < pA.size(); i++) {
if (!pMarker.getTitle().equals(pA.get(i))) {
pMarker.remove();
}
}
}
}

}

}
...
});

我的逻辑/算法:下面是我正在尝试获取 pName可用并尝试将其与可用 pMarker 匹配的标题,如果它匹配,那么 pMarker 不应该被删除,如果没有字符串等于 pMarker s title 那么这个标记应该被删除。

数据结构如下:

-app
-child
-rID
-uniqueID1
-userID1
-key: value
-key: value
-pName: value1
-currentLat: value1
-currentLng: value1
-uniqueID2
-userID2
-key: value
-key: value
-pName: value2
-currentLat: value2
-currentLng: value2
-uniqueID3
-userID3
-key: value
-key: value
-pName: value2
-currentLat: value2
-currentLng: value2

问题是,而不是 marker其标题不等于 ArrayList<String> pA 中可用的任何字符串,最近添加的标记正在被删除!

那么,如何删除标题不等于 ArrayList<String> pA 中任何可用字符串的标记?

请原谅我的问题不是很清楚,但我已经尽我所能地描述了它。如果您能给我一个更好、更简单的方法来实现我在这里想要的,我将不胜感激。

最佳答案

您实际上需要先填充整个标题列表,然后遍历所有标记。

然后,在遍历标记时,检查标题列表是否包含标记的标题。如果不是,请将其删除。

这应该有效:

// below is how I'm trying to remove markers
// First, populate the title list
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
Map<String, String> map = (Map<String, String>) childSnapshot.getValue();
pA.add(map.get("pName"));
}

// Then, iterate through the Markers
// Remove the Markers whose title is not contained in the title list
if (markersList.size() > 0) {
for (int i = 0; i < markersList.size(); i++) {
Marker m = markersList.get(i);
if (!pA.contains(m.getTitle())) {
m.remove();
}
}
}

关于android - 将标记的标题与从 FirebaseDatabase 获取的字符串进行比较后,无法从标记数组和 map 中删除标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com