【问题标题】:Getting the userId of another User type in the database获取数据库中另一个User类型的userId
【发布时间】:2018-06-19 22:55:02
【问题描述】:

我有一个 Android 项目,在不同的设备上有 2 个应用程序。我使用 Firebase 设置了后端服务。我有两个不同类型的用户,RiderDriver。从 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


    【解决方案1】:

    如何获取 theRiderApp 的用户 ID?

    除非您在骑手和司机之间建立联系,否则您不能这样做。因此,当您创建请求时,您还应该为特定的request 分配相应的驱动程序。然后就可以简单地查询数据库,从请求对象中获取所有数据,包括对应的驱动程序。

    您更改后的请求节点应如下所示:

    "Requests": {
      "khVbT88fA8YUmt5qv5LG0OTVZEm1": {
        ".priority": "f81189yp46",
        "destination": {
          "searchBar": "43 Union Street"
        },
        "g": "f81189yp46",
        "driver": "RAFIxzcAYjNNIU15IMIVHfr0CMC2", //driver id added
        "l": [
          45.274498,
          -66.0634308
        ]
      }
    },
    

    如您所见,现在请求对象包含作为节点的键的骑手 id 和作为属性的司机 id。

    【讨论】:

    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2016-05-13
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多