首页 文章

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

提问于
浏览
0

这需要一些帮助 .

我有一些商店的JSON和商店信息,比如他们的名字,ID和位置 . 我将其解析为ArrayList .

通过AsyncTask我将它们绘制在 Map 上 . 目前,这是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中最后一个商店的数据 . 如果您需要查看更多我的代码,请告诉我,我会更新我的帖子 .

我非常感谢你的帮助,提前谢谢!

EDIT: 我've just tested with the default marker onClick. (.title and .snippet) and it worked! It'显示正确的信息!有没有办法获得自定义onClick呢?看起来像setOnMarkerListener导致了问题 .

2 回答

  • 2

    它's because you'多次在SAME gMap 对象上调用 setOnMarkerClickListener() . 通过这种方式,将使用's not strange that the last call will take effect, and the last shop'的信息 . 您应该只设置 OnMarkerClickListener 一次 . 当然,您必须在其 onMarkerClick() 方法中识别您的标记,以确定点击了哪个商店 .

  • 0

    您可以将所有标记放在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;
            }
    
        });
    

相关问题