为了账号安全,请及时绑定邮箱和手机立即绑定

android:获取孩子的孩子

android:获取孩子的孩子

四季花海 2021-04-30 06:46:18
我正在尝试获取当前在“历史记录”节点中的游乐设施的“状态”,但首先我必须获取“ rideKey”。全局变量:字符串rideKey,字符串键。历史记录节点:{  "History" : {    "-LGXaukR30LTjrL3ZNpt" : {      "driver" : "ptnVOKounjXE9VrmZCCvKoZWluf1",      "rating" : 0,      "ridePrice" : 5.25,      "rider" : "C0RjB5NPZcTvWz9XiUAhpTDOK0C2",      "status" : "accepted",      "timestamp" : 1530662726    }  }}为了获得rideKey,我这样做是:    DatabaseReference keyRef = FirebaseDatabase.getInstance().getReference("History");    keyRef.addValueEventListener(new ValueEventListener() {        @Override        public void onDataChange(DataSnapshot dataSnapshot) {            rideKey = String.valueOf(mDatabase.child("History").push().getKey());            Log.d(TAG, "getKey: key = " + rideKey);        }        @Override        public void onCancelled(DatabaseError databaseError) {}    });这为我提供了历史记录中的所有键,如何获得最新的键?现在,我还需要获取请求的“状态”。但是,当我尝试获取状态时,它一直保持为空。我尝试将另一个ValueEventListener放入rideKey值事件中,但仍然为null
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

DatabaseReference keyRef = FirebaseDatabase.getInstance().getReference("History");

keyRef.addValueEventListener(new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        rideKey = String.valueOf(mDatabase.child("History").push().getKey());

        Log.d(TAG, "getKey: key = " + rideKey);


        DatabaseReference statusRef = FirebaseDatabase.getInstance().getReference("History").Child(rideKey).Child("status");

statusRef.addValueEventListener(new ValueEventListener() {

        @Override

        public void onDataChange(DataSnapshot dataSnapshot) {

            History history = new History(); //If you make class for history

            history = dataSnapshot.getValue(History.class);

            textViewStatus.setText(history.getStatus());

        }


        @Override

        public void onCancelled(DatabaseError databaseError) {


        }

    });

    }


    @Override

    public void onCancelled(DatabaseError databaseError) {


    }

});


查看完整回答
反对 回复 2021-05-12
?
炎炎设计

TA贡献1808条经验 获得超4个赞

要解决此问题,请使用以下代码:


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference historyRef = rootRef.child("History");

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        for(DataSnapshot ds : dataSnapshot.getChildren()) {

            Ride ride = ds.getValue(Ride.class);


            Log.d(TAG, "Driver = " + ride.getDriver());

            Log.d(TAG, "Rating = " + ride.getRating());

            Log.d(TAG, "Rider = " + ride.getRider());

            Log.d(TAG, "Price = " + ride.getRidePrice());

            Log.d(TAG, "status = " + ride.getStatus());

        }

    }


    @Override

    public void onCancelled(DatabaseError databaseError) {}

};

historyRef.addListenerForSingleValueEvent(valueEventListener);

logcat中的输出将是您的属性的值。


请注意,使用以下代码行时:


rideKey = String.valueOf(mDatabase.child("History").push().getKey());

您正在生成另一个密钥,而不是获取现有密钥。push()仅当添加对象时才使用该方法,而在阅读对象时则不要使用。


查看完整回答
反对 回复 2021-05-12
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信