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

前端之家收集整理的这篇文章主要介绍了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,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,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相关文章