Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何保存GeoFire坐标与Firebase数据库中的其他项目?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个应用程序,并保存一些字符串,如postedAtTime,postedBy,postOnDate在Firebase Database中.我想将GeoFire坐标保存在保存所有上述字符串的同一节点中,以便稍后我可以轻松查询.

以下是我保存所有字符串的路径:databaseReferenceHrequests = firebaseDatabase.getReferenceFromUrl(“https://appName-e1a35.firebaseio.com/requests/”);

这是我如何保存它:

// in onButtonClicked method:
postNewrequest(null,imageUID,MainActivity.userName.getText().toString(),time,date,utcFormatdatetiR_173_11845@e,MainActivity.userEmail.getText().toString(),geoFirE);

// the method:
public void postNewrequest(Bitmap bitmap,String imageUIDh,String postedBy,String postedAtTime,String postedOnDate,String utcFormatdatetiR_173_11845@e,String userEmail,GeoFire geoFirE) {
        Hrequest hrequest = new Helprequest(null,imageUIDh,postedAtTime,postedOnDate,userEmail,geoFirE);
        databaseReferenceHrequests.push().SETVALue(hrequest);
    }

以下是保存在数据库中的方法

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

我尝试通过给出这个参:geoFire = new GeoFire(firebaseDatabase.getReferenceFromUrl(“https://appName-e1a35.firebaseio.com/requests/”));然后用如上所示的其他项目推动它.但是,这只保存了GeoFire坐标,而不是节点下的其他项目:请求.

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

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

解决方法

弗兰克的答案是正确的,但我想举个例子.
你的数据库结构应该是这样的.
"items" : {
    <itemId> : {
        "someData" : "someData",...
    }
}
"items_LOCATIOn" : {
    <itemId> : {
        <geofireData> ...
    }
}

获取数据,首先需要在items_LOCATIOn节点执行GeoQuery,然后通过onKeyEntered方法获取数据.参数键是我的例子中的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
    }
};

希望这可以帮助.

编辑
如何推送项目并设置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));

EDIT在一个API调用中保存项目数据和geofire数据

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数据库中的其他项目?全部内容,希望文章能够帮你解决android – 如何保存GeoFire坐标与Firebase数据库中的其他项目?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。