【问题标题】:Retrieve first child from a parent in Firebase从 Firebase 中的父级检索第一个子级
【发布时间】:2018-09-17 17:40:42
【问题描述】:

我正在开发一个 Android 应用程序。我想要父“支持”的第一个孩子(第一个 UID)并将其存储在字符串变量中。如何从列表中获取第一个 UID 的值? 我尝试了一种方法。但它不起作用。

@Override
public void onDataChange(DataSnapshot dataSnapshot1) {
    if (dataSnapshot1.exists()) {
        String futureUID = "";
        for(DataSnapshot futureUIDdatasnapshot:dataSnapshot1.getChildren() ){
            futureUID = futureUIDdatasnapshot.getKey();
            break;
        }
        /*Getting the first UID from the list of UID's in queue in 'future'*/
        futureUID = dataSnapshot1.getChildren().iterator().next().getKey();
        /*Moving a card from 'future' to 'serving'*/
        societyServiceUIDReference.child(FIREBASE_CHILD_SERVING).child(futureUID).setValue(FIREBASE_ACCEPTED);
        /*Removing the UID from 'future' after it is placed in 'serving'*/
        societyServiceUIDReference.child(FIREBASE_CHILD_FUTURE).child(futureUID).removeValue();
    }

}

@Override
public void onCancelled(DatabaseError databaseError) {

}

注意:“futureUID”是我想要的 UID

【问题讨论】:

  • 你有没有试过任何代码,如果是的话然后发布它
  • 已更新代码
  • 这个逻辑永远不会稳定。例如,如果有人添加另一个用户支持会发生什么?考虑到数据总是在变化和变异,最好这样想“我如何构建我的数据来实现这样那样”

标签: android firebase firebase-realtime-database


【解决方案1】:

尝试以下方法:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("support");
Query queryUid=ref.orderByKey().limitToFirst(1);
queryUid.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot datas : dataSnapshot.getChildren()) {
        String key=datas.getKey();
            }
        }

 @Override
public void onCancelled(DatabaseError databaseError) {

    }
});

【讨论】:

  • for 在此处显示警告,因为很明显它不会循环
  • 这里它在孩子support的ID内循环,它将根据查询检索第一个ID..
  • 它是循环的,它会一一返回列表中的所有UID。订单是正确的,但它返回的 UID 数是错误的。我只想要一个 UID。不是全部。
【解决方案2】:

试试

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

.orderByKey().limitToFirst(n) 的诀窍是什么。它按键排序查询结果,只返回前n个结果;在这种情况下 1

mDatabase.getChild("support").orderByKey().limitToFirst(1)
.addListenerForSingleValueEvent(new ValueEventListener () {

      @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
          if(dataSnapshot.exists()){
              for (DataSnapshot supportItem: dataSnapshot.getChildren()) {
              String futureUID =supportItem.getKey();
            }
        }

    }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
         //Catch your error here
    }
});

Work with Lists of Data on Android

【讨论】:

  • for 在此处显示警告,因为很明显它不会循环
  • 您是否尝试过将 dataSnapshot 对象记录到您的控制台?使用 dataSnapshot.toString()
  • 它是循环的,它会一一返回列表中的所有UID。订单是正确的,但它返回的 UID 数是错误的。我只想要一个 UID。不是全部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2017-01-11
  • 2016-08-22
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
相关资源
最近更新 更多