Android - Firebase无法正确插入

时间:2017-11-21 13:57:47

标签: android firebase firebase-realtime-database

我有一个使用Google地图MapView的应用程序。使用我的地图,我可以插入我保存到Firebase实时数据库的标记。我有一个FirebaseMarker课程:

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

这很好用,但我还想在Firebase的不同节点中添加相同的标记,只有几个属性(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

1 个答案:

答案 0 :(得分:1)

这可能是在添加最新markers之前迭代Marker地图的问题,因此地图不会包含相同数量的项目。

我建议同时创建两个标记,例如:

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);

这样,可以保证两张地图的项目数相同。