【问题标题】:How do I retrieve the JSON response for each click on Google Map Marker?如何检索每次点击 Google Map Marker 的 JSON 响应?
【发布时间】:2020-03-26 16:17:06
【问题描述】:

通过从 JSON 获取数据,我能够在 android 上的谷歌地图上制作多个标记。所以现在每个标记都有自己对应的bukken_namelatitutelongitude

每次点击地图上的特定标记。我希望它在控制台中显示他们检索到的 JSON 数据。

在我当前的代码中,onMarkerClick 获取值,然后将其显示在 System.out.println 中。但是每当我这样做时,单击标记它只会继续显示与最后一个 JSON 数据完全相同的值。

 StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try{
                    JSONObject jsonObject = new JSONObject(response);
                    JSONObject data = jsonObject.getJSONObject("data");
                    JSONArray bukken_list = data.getJSONArray("bukken_list");

                    for (int i = 0; i < bukken_list.length(); i++) {
                        JSONObject returnBukken =  bukken_list.getJSONObject(i);

                        String latitude = returnBukken.getString("ido_hokui"); //latitude
                        String longitude = returnBukken.getString("keido_tokei"); //longitude
                        final String bukken_name = returnBukken.getString("bukken_name"); //longitude

                        final Double x = Double.parseDouble(latitude);
                        final Double y = Double.parseDouble(longitude);

                        System.out.println("COORDINATES: " + i);
                        System.out.println("LATITUDE: " + latitude);
                        System.out.println("LONGITUDE: " + longitude);
                        System.out.println("BUKKEN NAME: " + longitude);

                        LatLng japan = new LatLng(x, y);
                        MarkerOptions client_marker = new MarkerOptions().position(new LatLng(x, y));
                        client_marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.mapicon_rent));
                        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(japan, 10f));
                        mMap.addMarker(client_marker);
                        mMap.moveCamera(CameraUpdateFactory.newLatLng(japan));
                        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

                            @Override
                            public boolean onMarkerClick(Marker arg0) {

                                //FAULT: does not get value of each marker
                              System.out.println("MARKER " + x + " " + y + " " + bukken_name);

                                return true;
                            }
                        });

                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                int x = 1;
                // Anything you want
            }
        });

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

    设置 bukken_name 为标记的标签:

    Marker marker = mMap.addMarker(client_marker);
    marker.setTag(bukken_name);
    

    点击标记:

    public boolean onMarkerClick(Marker clickedMarker) {
        LatLng location = clickedMarker.getPosition();
        System.out.println("MARKER " + location.latitude + " " + location.longitude + " " + clickedMarker.getTag());
        return true;
    }
    

    【讨论】:

    • 我的好先生,我在bukken_name 上收到了null。还有一个问题,是否可以在一个标记中设置多个标签?谢谢!
    • @Olufsen setTag() 接受Object。在此处查看@MohammedAlSafwan 的答案:stackoverflow.com/questions/42892371/…
    猜你喜欢
    • 2018-08-15
    • 2015-04-02
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2023-03-15
    • 2015-07-25
    相关资源
    最近更新 更多