[英]JSON parsed to ArrayList. How can I get it to repeat data in onPostExecute for multiple map markers?
[英]Parsing JSON data to Map markers, all markers showing the same info, how can I fix this?
需要一点帮助。
我有一些商店的JSON和商店信息,比如他们的名字,ID和位置。 我将其解析为ArrayList。
通过AsyncTask我将它们绘制在地图上。 目前,这是4家商店。 我覆盖了标记onClick以我想要的方式显示数据。 我遇到的问题是,尽管基于经度和纬度标记位于正确的位置,但其他信息则不然。
当我点击标记时,所有这些都列出了相同的商店名称。 它只显示我的JSON中的最后一个商店。 所有数据都来自我JSON中的最后一个商店。 这是我的onPostExecute()代码:
@Override
protected void onPostExecute(ArrayList<ShopArray> shopArray) {
super.onPostExecute(shopArray);
for (ShopArray shopArrayOb : shopArray) {
double lat = shopArrayOb.geo_lat;
double lng = shopArrayOb.geo_lng;
final String barName = shopArrayOb.bar_name;
LatLng shopLocations = new LatLng(lat, lng);
MarkerOptions marker = new MarkerOptions()
.position(shopLocations)
gMap.addMarker(marker);
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
testText.setText(barName);
return false;
}
});
}
我真的不知道如何解决这个问题。 我只是想让它显示标记的正确名称,以及其他数据。 它不断显示我JSON中最后一个商店的数据。 如果您需要查看更多我的代码,请告诉我,我会更新我的帖子。
我非常感谢你的帮助,提前谢谢!
编辑:我刚刚使用默认标记onClick进行了测试。 (.title和.snippet)并且它有效! 它显示正确的信息! 有没有办法获得自定义onClick呢? 看起来像setOnMarkerListener导致了这个问题。
这是因为你多次在SAME gMap
对象上调用setOnMarkerClickListener()
。 通过这种方式,最后一次通话生效并不奇怪,最后一个商店的信息将被使用。 您应该只设置一次OnMarkerClickListener
。 当然,您必须在其onMarkerClick()
方法中识别您的标记,以确定点击了哪个商店。
您可以将所有标记放在HashMap中:
//somewhere befor async task
HashMap<LatLng, String> map = new HashMap<LatLng, String>();
然后添加标记:
//in your post execute
map.put(shopLocations, barName);
然后在你的听众中:
gMap.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
testText.setText(map.get(marker.getPosition()));
return false;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.