Android-Firebase无法正确插入 [英] Android - Firebase not inserting correctly

查看:35
本文介绍了Android-Firebase无法正确插入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用Google Maps MapView 的应用程序.使用地图,我可以插入保存到Firebase Realtime数据库的标记.我有一个 FirebaseMarker 类:

I have an application where I use a Google Maps MapView. With my map, I can insert markers which I save to the Firebase Realtime database. I have a FirebaseMarker class:

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

在我的片段中,我有一个 HashMap ,在其中放置了按键和标记.按下按钮后,这些标记将保存到数据库中.

In my fragment, I have a HashMap, where I put push-keys and the markers. When a button is pressed these markers are saved to the database.

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个局部标记.我所做的:

This works fine, but I also want to add the same markers with just a few properties (PartialMarker) inside a different node in Firebase. This gives me problems, as there is always one partial marker missing in the database. So if I put 3 markers on the map, only 2 partial markers are saved in the database inside the node. What I have done:

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

标记节点:

部分标记节点:

推荐答案

这可能是在将最新的 Marker 添加到之前遍历 markers 映射的问题.它,这样地图就不会包含相同数量的项目.

This is likely an issue with iterating over the markers map before the newest Marker has been added to it, so the maps then don't contain the same number of items.

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

I'd recommend creating both markers at the same time, something like:

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

这样,可以确保两个地图具有相同数量的物品.

This way, it's guaranteed that both maps have the same number of items.

这篇关于Android-Firebase无法正确插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆