【发布时间】:2018-06-19 22:55:02
【问题描述】:
我有一个 Android 项目,在不同的设备上有 2 个应用程序。我使用 Firebase 设置了后端服务。我有两个不同类型的用户,Rider 和 Driver。从 RiderApp,我保存到数据库中。
我要做的是检索我保存到数据库中的值。
Firebase 被设置为一个项目,其中两个应用共享相同的 google-services.json。
我的问题是,如果我在 DriverApp 中,如何获取 theRiderApp 的用户 ID?
如果我输入 userId = firebaseUser.getUid() -> 获取我所在应用程序的当前驱动程序,但我如何获取 RiderApp 的 userId 才能成功“读取 Firebase”?
Firebase 结构示例:
{
"Requests": {
"khVbT88fA8YUmt5qv5LG0OTVZEm1": {
".priority": "f81189yp46",
"destination": {
"searchBar": "43 Union Street"
},
"g": "f81189yp46",
"l": [
45.274498,
-66.0634308
]
}
},
"Users": {
"Drivers": {
"RAFIxzcAYjNNIU15IMIVHfr0CMC2": {
"email": "driver2@me.com",
"name": "LizG",
"password": "zzzzzz",
"phone": "6532525"
},
"vP9r4F2yDWRRuvKjRiQvMEXVuoK2": {
"email": "driver@me.com",
"name": "Batman",
"password": "zzzzzz",
"phone": "5326598",
"rates": "0"
}
},
"Riders": {
"khVbT88fA8YUmt5qv5LG0OTVZEm1": {
"avatarUrl": "",
"email": "rider@me.com",
"name": "Rider",
"password": "zzzzzz",
"phone": "5551211",
"rates": "0"
}
}
}
}
UserId = "用户/骑手" 当前用户 ID 从我的 DriverApp 中,我试图从“Requests/userId/destination/searchBar
中检索值已编辑
private void findDriver() {
final DatabaseReference drivers = FirebaseDatabase.getInstance().getReference(
Common.driver_tbl);
GeoFire gfDrivers = new GeoFire(drivers);
GeoQuery geoQuery = gfDrivers.queryAtLocation(new GeoLocation(Common.mLastLocation.getLatitude(),
Common.mLastLocation.getLongitude()), radius);
geoQuery.removeAllListeners();
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
// if found
if (!Common.isDriverFound) {
Common.isDriverFound = true;
Common.driverId = key;
btnRequest.setText("CALL DRIVER");
// Toast.makeText(RiderHome.this, "Request Sent",
// Toast.LENGTH_LONG).show();
}
}
@Override
public void onKeyExited(String key) { }
@Override
public void onKeyMoved(String key, GeoLocation location) { }
@Override
public void onGeoQueryReady() {
// if still not found driver, increase distance
if (!Common.isDriverFound && radius < LIMIT) {
radius++;
findDriver();
} else if (!Common.isDriverFound) {
Toast.makeText(RiderHome.this, "There are NO available drivers near you.",
Toast.LENGTH_LONG).show();
btnRequest.setText("REQUEST RYYDE");
}
}
@Override
public void onGeoQueryError(DatabaseError error) {}
});
}
更新代码
当运行给出结果时: {RBUUID8JNihtbMmvwgcjZVgj2Ku2={driver=wLY5SqTxiLTUhToZdcyRh8uqNKF3, g=f8118dn88t, destination={tapOnMap=Somerset St}, l=[45.2747733, -66.0628253]}}
Query query = FirebaseDatabase.getInstance().getReference().child("Requests")
.orderByChild("driver").equalTo(driverId);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String riderDest = String.valueOf(dataSnapshot.getValue());
etDestination.setText(riderDest);
Log.d(TAG, "riderDest = " + riderDest);
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
【问题讨论】:
标签: java android firebase firebase-realtime-database