如何从 Map<String、List> 中获取数组值<String>并放入 setOnMarkerClickListener?



如何从Map<String,>并放入setOnMarkerClickListener?

我可以得到LatLng值并放入谷歌地图标记,然后用户单击标记可以显示标题。但我想将marker替换为自定义图像。如何从图像数组中获取值?因为图片是必须上传的,所以我只想得到value[0]。

当用户点击我想要得到的PostID标记我如何发送PostID到onMarkerClick?

这是firebase数据

"Campsite" : {
"-MfS3VgBGROs_afkVrjl" : {
"CamperSiteAddress" : "Charles St & Esplanade W, Triabunna TAS 7190, Australia",
"CamperSiteID" : "-MfS3VgBGROs_afkVrjl",
"Counrty" : "Australia",
"CamperSiteImages" : [
"https://firebasestorage.googleapis.com/v0/b/campingau-6b84d.appspot.com/o/CampSitePhotos%2F1627206575487.null?alt=media&token=bff07bd4-fd17-4099-a0d7-db0418311425", 
"https://firebasestorage.googleapis.com/v0/b/campingau-6b84d.appspot.com/o/CampSitePhotos%2F1627206580478.null?alt=media&token=995bf983-0ee8-4f25-af3f-921aa5b0077c", 
"https://firebasestorage.googleapis.com/v0/b/campingau-6b84d.appspot.com/o/CampSitePhotos%2F1627206584072.null?alt=media&token=137b87a9-f6fb-4f75-9d53-7c3efda8cda4" 
],
"CamperSiteLatitude" : -42.508695,
"CamperSiteLongitude" : 147.916617,
"CamperSiteName" : "Encampment Cove Walk"
}

这是我的代码

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Campsite");
Query query = reference.orderByChild("country").equalTo(country);
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String previousChildName) {
list.clear();
Map<String, List<String>> mapImage = (Map<String, List<String>>) dataSnapshot.getValue();
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
Double lat = (Double)map.get("CamperSiteLatitude");
Double lng = (Double)map.get("CamperSiteLongitude");
LatLng newLocation = new LatLng(lat, lng);
String CampSiteName = String.valueOf(map.get("CamperSiteName"));
String CampSitePostID = (String) map.get("CamperSiteID");
//String CampSiteImage = mapImage.get("CamperSiteImages");
list.add(String.valueOf(newLocation));
//listImage.add(CampSiteImage);
for(int i = 0; i < list.size(); i++){
Bitmap bitmap = null;
try{
byte[] imageAsBytes = Base64.decode(listImage.get(i).getBytes(), Base64.DEFAULT);
bitmap = BitmapFactory.decodeByteArray(imageAsBytes,0,imageAsBytes.length);
} catch (Exception e){
e.printStackTrace();
}
progressDialog.dismiss();
//mMap.addMarker(new MarkerOptions().position(newLocation).title(listTitle.get(i)).icon(BitmapDescriptorFactory.fromBitmap(bitmap)));
mMap.addMarker(new MarkerOptions().position(newLocation).title(CampSiteName).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(getContext(),CampSitePostID, Toast.LENGTH_SHORT).show();
return false;
}
});
}
}
}

这似乎不对:

Map<String, List<String>> mapImage = (Map<String, List<String>>) dataSnapshot.getValue();

图像列表存储在快照的CamperSiteImages属性中,因此需要:

List<String> mapImage = (List<String>) dataSnapshot.child("CamperSiteImages").getValue();

相关内容

最新更新