2015-01-16 3 views
0

내 애플리케이션은 JSON 파일에서 마커가로드 된지도를 표시하고 마커를 클릭하면 "통화 하시겠습니까?"라고 물어 봅니다. 그런 다음 마커가 위치한 사람에게 전화가 걸립니다. 그러나이 코드를 사용하면 모든 마커가 동일한 번호, 즉 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); 
     }}); 

    } 
} 
+0

그럼 그냥 밖으로 넣어 '반복. 또한 hashmap arraylist에 전화 번호를 추가하고 위치에 따라 검색하십시오. – Piyush

+0

예.하지만 시도했지만 똑같은 문제가 있습니다 ... – Raph

답변

1

전화의 URI에 마커를 연결하는 HashMap의 작성 : 대한`당신`OnInfoWindowClickListener` 방법은 for` 루프`에있는 경우

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); 
     } 
    }); 
} 
+0

위대한 작품이라고 생각합니다. – Raph

+0

그러나 표현식 마커는 여기에서 해결할 수 없습니다. phones.put (marker, Uri.parse ("tel : +33" + jsonObj.getString ("phone")))); – Raph

+0

@Raph 전체 코드를 복사하십시오. – Simas

관련 문제