如何在Firebase中保存位置信息

10

我试图将位置(即纬度和经度)保存为Firebase中的一个键/字段。在他们的示例SFVehicles中,他们确实展示了一旦信息被存储如何进行查询,但我的问题是如何首先保存。

在他们的博客文章GeoFire goes Mobile中,他们展示了数据看起来像什么,但是我如何填充location字段呢?

enter image description here

尽管我能够将其他类型的字符串保存到Firebase中,但这个问题仍然存在。我只使用下面的代码。

问题是location字段应该是什么数据类型?

        Firebase ref = new Firebase("https://myfirebaselink.firebaseio.com/");

       //User 
       alan = new User("Alan Turing", 1912);


        alanRef.setValue(obj);

我尝试将location设置为List<String>,但无效 - location字段看起来像下面这样:

enter image description here

编辑:在进一步研究中,发现了谷歌的这篇博客文章,但他们也将latitude1longitude保存为键。 这可能是在引入`GeoFire之前编写的。


您在问题中包含了JSON树的图片。请用实际的JSON文本替换它,这可以通过在Firebase数据库中点击“导出”按钮轻松获取。将JSON作为文本使其可搜索,允许我们轻松地与您的实际数据进行测试并将其用于我们的答案中,总的来说这是一件好事。 - Frank van Puffelen
Google地理开发者博客文章没有使用GeoFire。因此,如果您想使用GeoFire,则与您无关。 - Frank van Puffelen
2个回答

7

GeoFire for Java项目有一个很棒的README,其中包括(除其他内容外)设置位置数据

在GeoFire中,您可以通过字符串键设置和查询位置。要为键设置位置,只需调用setLocation()方法。该方法将键作为字符串和包含位置纬度和经度的GeoLocation对象传递:

geoFire.setLocation("firebase-hq", new GeoLocation(37.7853889, -122.4056973));

要检查写入是否成功保存在服务器上,您可以将GeoFire.CompletionListener添加到setLocation()调用中:
geoFire.setLocation("firebase-hq", new GeoLocation(37.7853889, -122.4056973), new GeoFire.CompletionListener() {
    @Override
    public void onComplete(String key, FirebaseError error) {
        if (error != null) {
            System.err.println("There was an error saving the location to GeoFire: " + error);
        } else {
            System.out.println("Location saved on server successfully!");
        }
    }
});

要删除一个位置并将其从数据库中删除,只需将该位置的键传递给removeLocation:
geoFire.removeLocation("firebase-hq");

谢谢,readme文件非常好,清晰地解释了所有操作。我太糊涂了,谢谢提醒。 - user1406716

2
这里看来,对象的类型是GeoLocation,就像第83行一样。

链接已过期 :( - Liker777

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接