2017-11-21 7 views
-1

Google지도 MapView을 사용하는 애플리케이션이 있습니다. 내 맵으로 Firebase Realtime 데이터베이스에 저장하는 마커를 삽입 할 수 있습니다. 나는 FirebaseMarker 클래스가 내 조각에서Android - Firebase가 올바르게 삽입되지 않음

public class FirebaseMarker { 
    String address; 
    String time; 
    double latitude; 
    double longitude; 
    ... 
} 

을, 나는 및 마커 - 키를 눌러 넣어 HashMap을 보유하고 있습니다. 버튼을 누르면이 마커가 데이터베이스에 저장됩니다.

public class MapFragment extends Fragment implements OnMapReadyCallback { 
    HashMap<String, Object> markers = new HashMap<>(); 

    public void onMapReady(final GoogleMap googleMap) { 
     String markerIds = userRef.push().getKey(); 
     FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude); 
     markers.put(markerIds, marker); 
    } 

    private void saveToDatabase(){ 
     userRef.child(sharedPreferences.getString("school", null)).child("markers").updateChildren(markers); 
    } 
} 

이 잘 작동하지만 나 또한 중포 기지의 다른 노드 내부의 몇 가지 특성 (PartialMarker)와 같은 마커를 추가 할. 이것은 항상 데이터베이스에 하나의 부분 마커가 없기 때문에 나에게 문제가된다. 따라서 맵에 3 개의 마커를 넣으면 노드 안의 데이터베이스에 2 개의 부분 마커 만 저장됩니다. 그런 다음

public class PartialMarker { 
    String address; 
    String time; 
    .. 
} 

을 내가 할 : 내가 한 일을

public class MapFragment extends Fragment implements OnMapReadyCallback { 
    HashMap<String, Object> partialMarkers= new HashMap<>(); 

    public void onMapReady(final GoogleMap googleMap) { 
     for (Map.Entry<String, Object> entry : markers.entrySet()) { 
      String key = entry.getKey(); 
      FirebaseMarker marker = (FirebaseMarker) entry.getValue(); 
      partialMarkers.put(key, new PartialMarker(marker.getAddress(), marker.getTime())); 
     } 
    } 

    private void saveToDatabase(){ 
     userRef.child(sharedPreferences.getString("school", null)).child("markers").updateChildren(markers);  
     userRef.child(sharedPreferences.getString("school", null)).child("routes").child(routeId).child("partialMarkers").updateChildren(partialMarkers); 
    } 
} 

마커 노드 :

enter image description here

부분 마커 노드 :

enter image description here

+0

언제 saveToDatabase()를 사용합니까? 전체 코드를 추가하십시오. – MarcGV

+0

코드가 정상적으로 보이므로 다른 문제가있을 수 있습니다. 전체 코드 샘플을 공유 할 수 있습니까? 'FirebaseMarker marker = new FirebaseMarker ([...])'와 같이 동시에 두 마커를 만들면 : PartialMarker partialMarker = new PartialMarker ([...]))'를 다른지도에 넣으면 각 목록에 항상 정확한 수의 항목이 있어야합니다. 'PartialMarker' 맵을'FirebaseMarker' 맵과 동기화되지 않게 만드는 것 같습니다. – Grimthorr

+0

@Grimthorr이 말했듯이 부분 마커 맵의 동기화가 불가능할 가능성이 큽니다. 'saveToDatabase()'에 중단 점을 넣고 두 맵의 길이를 센다. 이들이 실제로 동일하다면, 내가 실행할 수있는 작은 조각으로 문제를 격리하려고 할 수 있습니까? 따라서 하드 코딩 된 값으로 테스트 할 앱에 복사하거나 붙여 넣을 수 있습니다. –

답변

1

Marker이 추가되기 전에 markers 맵을 반복 할 때 문제가 발생할 수 있으므로지도에 같은 수의 항목이 포함되지 않습니다.

나는 동시에 두 마커를 만드는 것이 좋습니다 것, 뭔가 같은 :

String markerId = userRef.push().getKey(); 

FirebaseMarker marker = new FirebaseMarker(address, time, latitude, longitude); 
PartialMarker partialMarker = new PartialMarker(address, time) 

markers.put(markerId, marker); 
partialMarkers.put(markerId, partialMarker); 

이 방법, 두지도는 동일한 수의 항목을 보장합니다.

+1

답변 해 주셔서 감사합니다. 이것은 완벽하게 작동합니다. 나는 당신의 대답을 받아 들였습니다 :) – JDoe

관련 문제