gpt4 book ai didi

android - 使用数据快照从 map 标记中获取数据

转载 作者:行者123 更新时间:2023-11-29 00:51:47 26 4
gpt4 key购买 nike

我有这个数据库:

{
"Locale" : {
"Feed1" : {
"title" : "title1"
"desc" : "description"
"lat" : 47.56494,
"lng" : 46.245,
},
"Feed2" : {
"desc" : "Desc nomer 2",
"id" : "id 2",
"lat" : 45.56494,
"lng" : 47.245,
"title" : "title2"
}
},
}

我在我的 Activity 中添加了带有标记的 g-map。当我单击标记时,它会打开新的详细信息 Activity 。所以我希望这个标记将数据从标记传递到详细 Activity 。

我使用 onMarkerClick:

override fun onMarkerClick(marker: Marker): Boolean {
mRefLocal.addValueEventListener(vael)
return false
}

这是我的 addValueEventListener(vael)

  var vael: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
for (snapshot in dataSnapshot.children) {
val feeds = snapshot.getValue(Feeds::class.java)
title = feeds!!.title
id = feeds.id
desc = feeds.desc
}
val intent = Intent(this@MapsActivity, FeedsDetail::class.java)
intent.putExtra("id", id)
intent.putExtra("desc", desc)
intent.putExtra("title", title)
startActivity(intent)
Toast.makeText(this@MapsActivity, title, Toast.LENGTH_SHORT).show()
}
override fun onCancelled(databaseError: DatabaseError) {}
}

所以无论我点击什么标记,我总是从数据库中获得相同的数据。我想从点击的标记中获取分配的数据。怎么了?

最佳答案

当您使用以下代码时:

override fun onMarkerClick(marker: Marker): Boolean {
mRefLocal.addValueEventListener(vael)
return false
}

您正在 mRefLocal 节点上添加一个监听器,它指向 Locale 节点,而不是特定的 FeedsDetail 对象。 Locale 节点包含所有 FeedsDetail 对象。因此,您应该使用:

mRefLocal.child(marker.title).addValueEventListener(vael)

看,我添加了对 .child(marker.name) 的调用。由于您没有 name 属性,您应该在每个对象下添加它。您的架构应如下所示:

{
"Locale" : {
"Feed1" : {
"name" : "Feed1", //Added
"title" : "title1",
"desc" : "description1",
"id" : "id 1",
"lat" : 47.56494,
"lng" : 46.245
},
"Feed2" : {
"name" : "Feed2", //Added
"title" : "title2",
"desc" : "Desc nomer 2",
"id" : "id 2",
"lat" : 45.56494,
"lng" : 47.245
}
},
}

看到了吗,每个对象下的新 name 属性?

So no matter what marker I click I always get the same data from db.

让我猜猜,它总是最后一个,对吧?请注意,这是预期的行为,因为您正在遍历所有对象并且仅将最后一个对象添加到 Intent 中。因此,您分配给 titleiddesc 变量的值仅来自上一次迭代。

I want to get assigned data from the clicked marker.

要获取特定元素的数据,请使用以下代码:

var vael: ValueEventListener = object : ValueEventListener {
override fun onDataChange(dataSnapshot: DataSnapshot) {
val feeds = dataSnapshot.getValue(Feeds::class.java)

val intent = Intent(this@MapsActivity, FeedsDetail::class.java)
intent.putExtra("id", feeds.id)
intent.putExtra("desc", feeds.desc)
intent.putExtra("title", feeds!!.title)
startActivity(intent)
Toast.makeText(this@MapsActivity, title, Toast.LENGTH_SHORT).show()
}
override fun onCancelled(databaseError: DatabaseError) {}
}

看,现在不需要任何循环,因为只在特定的 FeedsDetail 对象上添加监听器。

So I want this marker to pass data from marker into detail activity.

使用此解决方案,您只需传递被单击的标记的详细信息。

关于android - 使用数据快照从 map 标记中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58890640/

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