gpt4 book ai didi

android - 如何将 GeoFire 坐标与 Firebase 数据库中的其他项目一起保存?

转载 作者:IT老高 更新时间:2023-10-28 23:17:34 34 4
gpt4 key购买 nike

我正在开发一个应用程序并在 Firebase 数据库中保存一些字符串,例如 postedAtTimepostedBypostedOnDate。我想将 GeoFire 坐标保存在保存上述所有字符串的同一节点中,以便稍后我可以轻松地进行查询。

这是我保存所有字符串的路径:

databaseReferenceHRequests = firebaseDatabase.getReferenceFromUrl("https://appName-e1a35.firebaseio.com/requests/");

这就是我保存它的方式:

// in onButtonClicked method:
postNewRequest(null, imageUID, MainActivity.userName.getText().toString(), time, date, utcFormatDateTime, MainActivity.userEmail.getText().toString(), geoFire);

// the method:
public void postNewRequest(Bitmap bitmap, String imageUIDh, String postedBy, String postedAtTime, String postedOnDate, String utcFormatDateTime, String userEmail, GeoFire geoFire) {
HRequest hRequest = new HelpRequest(null, imageUIDh, postedBy, postedAtTime, postedOnDate, utcFormatDateTime, userEmail, geoFire);
databaseReferenceHRequests.push().setValue(hRequest);
}

以下是它在数据库中的保存方式:

database structure screenshot

我想要的是将 GeoFire 坐标保存在同一节点中,即 -KLIoLUsI0SpQZGpV1h4 这里。这只是一个推送 ID,它是随机生成的。

我通过提供此引用进行了尝试:

geoFire = new GeoFire(firebaseDatabase.getReferenceFromUrl("https://appName-e1a35.firebaseio.com/requests/"));

然后将其与其他项目一起推送,如上图所示。但是,这仅保存了 GeoFire 坐标,而不是节点 requests 下的其他项目。

那么,我的 GeoFire 引用应该是什么,以便它与同一节点中的所有数据一起保存?

这里出了什么问题?请告诉我。

最佳答案

弗兰克的回答是正确的,但我想举个例子。你的数据库结构应该是这样的。

{
"items" : {
<itemId> : {
"someData" : "someData",
...
}
},
"items_location" : {
<itemId> : {
<geofireData> ...
}
}
}

要获取数据,首先需要在 items_location 节点进行 GeoQuery,然后通过 onKeyEntered 方法获取数据。参数 key 是我的示例中的 itemId

geoFire = new GeoFire(FirebaseDatabase.getInstance().getReference().child("items_location");
geoQuery = geoFire.queryAtLocation(geoLocation), radius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
//retrieve data
}
};

希望这会有所帮助。

编辑如何推送item并设置geofire数据。

String itemId = ref.child("items").push().getKey();

ref.child("items").child(itemId).setValue(item);

geoFire = new GeoFire(ref.child("items_location"));
geoFire.setLocation(itemId, new GeoLocation(lattitude, longitude));

编辑在一次 API 调用中保存项目数据和地理火灾数据

GeoHash geoHash = new GeoHash(new GeoLocation(latitude, longitude));
Map<String, Object> updates = new HashMap<>();
updates.put("items/" + itemId, item);
updates.put("items_location/" + itemId + "/g", geoHash.getGeoHashString());
updates.put("items_location/" + itemId + "/l", Arrays.asList(latitude, longitude));
ref.updateChildren(updates);

关于android - 如何将 GeoFire 坐标与 Firebase 数据库中的其他项目一起保存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38340949/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com