【问题标题】:Firebase Android getKey() returns childFirebase Android getKey() 返回子
【发布时间】:2018-03-14 08:35:29
【问题描述】:

我正在尝试检索“票”下方的孩子,但无法做到这一点。方法 getKey() 是返回“票”而不是密钥。

private void getSpecificTicketFromFirebase() {
Timber.d("Inside Pull Data %s ",firebaseManager.getFireBaseUser().getUid()) ;
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("user").child(firebaseManager.getFireBaseUser().getUid()).child("ticket");
FirebaseDatabase.getInstance().getReference().addValueEventListener(new ValueEventListener() {
  int i=0;
  @Override public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot data : dataSnapshot.getChildren()) {
      passengerData = data.getValue(PassengerViewModel.class);
      passengerViewModel.add(passengerData);
      Timber.d("Passenger Name %s index %s key %s",passengerViewModel.get(i).getFromStationName(),i,data.child("passengerName"));
      i++;
    }
  }

  @Override public void onCancelled(DatabaseError databaseError) {
    Timber.e(databaseError.getDetails());
    Timber.e(databaseError.getMessage());
    Timber.e(databaseError.toException());
  }
});

}

【问题讨论】:

  • 请将您的代码和数据库结构添加为文本而不是图像。这使其可搜索,并可用于可能的答案。

标签: android firebase firebase-realtime-database


【解决方案1】:

如果只想获取PassengerViewModel类的那些对象,则无需使用child()方法。只需删除此调用:.child(ref.getKey()),您的代码就会完美运行。

如果您想将该按键传递给child() 方法,您需要先将其存储到一个变量中。为此,请使用以下代码:

String key = ref.push().getKey();

一旦你有了这个密钥,你就可以在任何参考中使用它。

【讨论】:

  • 现在我正在做data.getValue(PassengerViewModel.class),然后当我尝试获取passengerViewModel.get(i).getPassengerName 时,值为NULL。
  • 无需使用:.get(i)。删除此方法调用。有用吗?
  • 我在做passengerData = data.child(firebaseManager.getFireBaseUser().getUid()).child("ticket").getValue(PassengerViewModel.class); 然后passengerData.getPassengerName 但它仍然是NULL
  • 我是否需要为每个条目存储push.getKey() 结果?为什么不存储就无法获取密钥?
  • 编辑:发布答案。啤酒在我身上@Alex。谢谢。
【解决方案2】:

首先谢谢@AlexMamo....

这是正确的做法.....

private void getSpecificTicketFromFirebase() {
DatabaseReference ref =
    FirebaseDatabase.getInstance().getReference().child("user").child(firebaseManager.getFireBaseUser().getUid()).child("ticket");

ref.addValueEventListener(new ValueEventListener() {
  @Override public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot data : dataSnapshot.getChildren()) {
      Timber.d("Key %s",data.getKey());
    }
  }

  @Override public void onCancelled(DatabaseError databaseError) {
    Timber.e(databaseError.toException());
  }
});

【讨论】:

    猜你喜欢
    • 2023-02-14
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多