android:获取孩子的孩子

我正在尝试获取当前在“历史记录”节点中的游乐设施的“状态”,但首先我必须获取“ 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


四季花海
浏览 157回答 3
3回答

慕尼黑8549860

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) {    }});

炎炎设计

要解决此问题,请使用以下代码: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()仅当添加对象时才使用该方法,而在阅读对象时则不要使用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java