简体   繁体   English

Android Firebase检查孩子中是否存在数据

[英]Android Firebase check if data exisits in a child

I am developing an App that allows for its Users to see a certain Company's Buses and trains in Realtime. 我正在开发一个应用程序,允许其用户实时查看特定公司的公共汽车和火车。

Currently the Driver of a bus or tram registers by selecting which Route/Line he is working on with email and password and that get placed in a specific node in Firebase. 当前,公共汽车或电车的驾驶员通过选择他正在处理的路线/线路来使用电子邮件和密码进行注册,并将其放置在Firebase中的特定节点中。 For example, if the Driver selects Red Line then his UID is placed in Users => Drivers => RedLine => bus. 例如,如果驱动程序选择“红线”,则其UID将放置在“用户=>驱动程序=>红线=>总线”中。

Then when the Driver Logs in, he can toggle a "I am Working" switch, which emits its location to the Users. 然后,当驾驶员登录时,他可以切换“我正在工作”开关,该开关将其位置发送给用户。

But when that happens I want that userID(userUID) to be placed in the "driversAvailable" node under a Branch which is the Route that UID is listed under in Users => Drivers, but I am battling to Find Answers. 但是,当发生这种情况时,我希望将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);
}

My current Firebase Database: 我当前的Firebase数据库:

在此处输入图片说明

okay, so after alot of trial and error, I figured it out, and its not as complicated as I was fearing it to be. 好吧,所以经过反复试验,我弄清楚了,它并不像我担心的那样复杂。

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 我当前的数据库

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM