如何从 Map<String, List<String>> 获取数组值并放入 setOnMarkerClickListener?
Posted
技术标签:
【中文标题】如何从 Map<String, List<String>> 获取数组值并放入 setOnMarkerClickListener?【英文标题】:How can I get array value from Map<String, List<String>> and put into setOnMarkerClickListener? 【发布时间】:2021-11-13 23:44:54 【问题描述】:如何从 Map
我可以获取 LatLng 值并放入谷歌地图标记,然后用户单击标记可以显示标题。但我想将标记替换为自定义图像。如何从图像数组中获取值?因为图片是必须上传的,所以我只想得到值[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;
);
【问题讨论】:
请编辑您的问题并将您的数据库结构添加为 JSON 文件,而不是描述您的数据库的外观。您可以通过单击 Firebase Console 的溢出菜单 (⠇) 中的导出 JSON 来简单地获取它。 @AlexMamo 好的,我改变了我的上下文。 那么你需要获取CamperSiteImages
里面的数据吗?
@AlexMamo 我有两个问题,首先,我需要获取 CamperSiteImages 值,因为我想替换标记。其次,当我单击 onMarkerClick 时,我需要获取 CamperSiteID,然后我将更改为其他片段,但是现在当我单击标记时,我总是得到相同的 CamperSiteID
我在“-MfS3VgBGROs_afkVrjl”节点中看不到任何“国家”字段。
【参考方案1】:
这似乎是错误的:
Map<String, List<String>> mapImage = (Map<String, List<String>>) dataSnapshot.getValue();
图像列表存储在快照的CamperSiteImages
属性中,因此您需要:
List<String> mapImage = (List<String>) dataSnapshot.child("CamperSiteImages").getValue();
【讨论】:
thx,还有其他问题,我使用setOnMarkerClickListener
时如何获取CamperSiteID
我可以压缩位图吗?这是我的方法。 bitmap = Ion.with(getApplicationContext()).load(CampSiteImage).withBitmap().fitCenter().resize(100,100).asBitmap().get();
以上是关于如何从 Map<String, List<String>> 获取数组值并放入 setOnMarkerClickListener?的主要内容,如果未能解决你的问题,请参考以下文章
如何将两个List<Map<String,Object>>合并为一个
如何将map<string list<>>转换成城map<string,object>
list<String>如何转化为Map<String, Object>,list<EmpVO>如何转化为Map<String, Object>