如何为每个标记获取具有不同值的变量(来自JSON)
How to get a variable with a different value for each marker (from JSON)
我的应用程序显示了一张带有从 JSON 文件加载的标记的地图,当您单击标记时它会询问 "Would you like to call ?"。然后向标记所定位的人发出 phone 呼叫。
但是使用这段代码,所有标记都调用相同的数字,即我的 JSON 文件中的最后一个。
那么如何将与人对应的不同 phone 数字 (phone) 传递给每个标记?
谢谢:)
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);
}});
}
}
创建一个 HashMap,它将 link 你的标记到 phone 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);
}
});
}
我的应用程序显示了一张带有从 JSON 文件加载的标记的地图,当您单击标记时它会询问 "Would you like to call ?"。然后向标记所定位的人发出 phone 呼叫。 但是使用这段代码,所有标记都调用相同的数字,即我的 JSON 文件中的最后一个。 那么如何将与人对应的不同 phone 数字 (phone) 传递给每个标记? 谢谢:)
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);
}});
}
}
创建一个 HashMap,它将 link 你的标记到 phone 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);
}
});
}