繁体   English   中英

将JSON数据解析为Map标记,所有标记显示相同的信息,我该如何解决这个问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM