java - Android Firebase检查子代中是否存在数据

标签 java android firebase firebase-realtime-database

我正在开发一个应用程序,允许其用户实时查看特定公司的公共汽车和火车。

当前,公共汽车或电车的驾驶员通过选择他正在处理的路线/线路来使用电子邮件和密码进行注册,并将其放置在Firebase中的特定节点中。例如,如果驱动程序选择“红线”,则其UID将放置在“用户=>驱动程序=>红线=>总线”中。

然后,当驾驶员登录时,他可以切换“我正在工作”开关,该开关将其位置发送给用户。

但是,当发生这种情况时,我希望将userID(userUID)放在分支下的“ driversAvailable”节点中,该分支是UID在“用户=>驱动程序”下列出的路由,但是我正在努力寻找答案。

void saveGeoFire(){
    final String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();

    final DatabaseReference ref = FirebaseDatabase.getInstance().getReference("driversAvailable").child("drivers");
    final DatabaseReference driversRouteRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers");

    ValueEventListener driversAvailableEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) // in Users => Driverrs => RedLine for example
            {
                //Create new Branch in "driversAvailable" => Drivers => RedLine => userID
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    };
driversRouteRef.addListenerForSingleValueEvent(driversAvailableEventListener);
}


我当前的Firebase数据库:

enter image description here

最佳答案

好吧,所以经过反复试验,我弄清楚了,而且它并不像我担心的那样复杂。

void saveGeoFire(){
    final DatabaseReference yellowRef = FirebaseDatabase.getInstance().getReference().child("driversAvailable").child("drivers").child("YellowLine");
    final DatabaseReference redRef = FirebaseDatabase.getInstance().getReference().child("driversAvailable").child("drivers").child("RedLine");

    final String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();

    final DatabaseReference driversRouteRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers").child("Redline").child("bus");
    final DatabaseReference driversRouteRedRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Drivers");
    ValueEventListener redRefEventListenter = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()) {

                    if(dataSnapshot.child("RedLine").child("bus").getValue().toString().contains(userId)){
                        Toast.makeText(DriverMapActivity.this, "RedLinesuccess", Toast.LENGTH_SHORT).show();
                        GeoFire geoFire = new GeoFire(redRef);
                        geoFire.setLocation(userId, new GeoLocation(mLastLocation.getLatitude(),mLastLocation.getLongitude()));
                    }
                    if(dataSnapshot.child("YellowLine").child("bus").getValue().toString().contains(userId)){
                        Toast.makeText(DriverMapActivity.this, "YellowLine success", Toast.LENGTH_SHORT).show();
                        GeoFire geoFire = new GeoFire(yellowRef);
                        geoFire.setLocation(userId, new GeoLocation(mLastLocation.getLatitude(),mLastLocation.getLongitude()));
                    }

                }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    };
    driversRouteRedRef.addListenerForSingleValueEvent(redRefEventListenter);
}


My current Database

关于java - Android Firebase检查子代中是否存在数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929705/

相关文章:

java - 将数字分成两部分

java - GAE 和通用 servlet Controller

android - 使用 Retrofit 时如何构建 API

mongodb - 想了解 MongoDB 与 Firebase 和 Flutter 的安全性

ios - 尝试自定义 FUIAuthPickerViewController 并在 AppDelegate 中出错

android - Firebase 错误 : Firebase: Firebase App named '[DEFAULT]' already exists (app/duplicate-app)

java - Cardview 没有占据全宽(从左边裁剪 2%)

java - 在@Scheduled中分配字符串(cron ="Some String")

android - Phonegap 拦截 jQueryMobile Ajax 调用

java - dialogBu​​ilder.setMessage 为空