【问题标题】:How to get a variable with a different value for each marker (from JSON)如何为每个标记获取具有不同值的变量(来自 JSON)
【发布时间】:2015-01-16 09:59:59
【问题描述】:

我的应用程序显示带有从 JSON 文件加载的标记的地图,当您单击标记时,它会询问“您想打电话吗?”。然后向标记所定位的人拨打电话。 但是使用此代码,所有标记都调用相同的数字,即我的 JSON 文件中的最后一个。 那么如何将与该人对应的不同电话号码(电话)传递给每个标记? 谢谢你:)

 protected void createMarkersFromJson(String json) throws JSONException {
 map.setInfoWindowAdapter(new Balloon(getLayoutInflater()));

 JSONArray jsonArray = new JSONArray(json);
 for (int i = 0; i < jsonArray.length(); i++) {
 // Create a marker for each person in the JSON data.
 JSONObject jsonObj = jsonArray.getJSONObject(i);
    map.addMarker(new MarkerOptions()
           .title(jsonObj.getString("name"))
           .snippet(jsonObj.getString("dispo"))
           .position(new LatLng(
                   jsonObj.getJSONArray("latlng").getDouble(0),
                   jsonObj.getJSONArray("latlng").getDouble(1)))
           .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));

    phone =  Uri.parse("tel:+33" + jsonObj.getString("phone"));

    map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

            @Override
            public void onInfoWindowClick(Marker marker) {
                 Intent callIntent = new Intent(Intent.ACTION_DIAL, phone);
                 startActivity(callIntent);
      }});

    }
}

【问题讨论】:

  • 如果您的OnInfoWindowClickListener 方法在for 循环中,那么只需将其从for 循环中取出。还将您的电话号码添加到 hashmap arraylist 并按其位置检索。
  • 是的,我试过了,但我有同样的问题......

标签: android json google-maps


【解决方案1】:

创建一个 HashMap,将您的标记链接到电话 Uris:

HashMap<Marker, Uri> phones = new HashMap<>();

protected void createMarkersFromJson(String json) throws JSONException {
    map.setInfoWindowAdapter(new Balloon(getLayoutInflater()));

    JSONArray jsonArray = new JSONArray(json);
    for (int i = 0; i < jsonArray.length(); i++) {
        // Create a marker for each person in the JSON data.
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        Marker marker = map.addMarker(new MarkerOptions()
                .title(jsonObj.getString("name"))
                .snippet(jsonObj.getString("dispo"))
                .position(new LatLng(
                        jsonObj.getJSONArray("latlng").getDouble(0),
                        jsonObj.getJSONArray("latlng").getDouble(1)))
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.pin)));

        phones.put(marker, Uri.parse("tel:+33" + jsonObj.getString("phone")));
    }

    map.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
            Intent callIntent = new Intent(Intent.ACTION_DIAL, phones.get(marker));
            startActivity(callIntent);
        }
    });
}

【讨论】:

  • 但是这里不能解决表达式标记:phones.put(marker, Uri.parse("tel:+33" + jsonObj.getString("phone")));
  • 这对我不起作用。气球未声明,但仍然只得到第一个结果,因为它让我宣布 Hashmap Final
猜你喜欢
  • 2021-07-08
  • 2021-03-18
  • 1970-01-01
  • 2019-10-16
  • 2019-01-06
  • 2017-06-16
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多