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

如何通过简单的 for 循环从 Firebase Android 获取所有子列表

如何通过简单的 for 循环从 Firebase Android 获取所有子列表

吃鸡游戏 2021-06-15 17:45:25
下面的代码通过 forEach 循环给了我 Firebase 中的所有孩子:final Query query = mDataBaseReference_info_channels.child(getUserDetails().getUserId()).child("channels");query.addValueEventListener(new ValueEventListener() {            @Override            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {for (DataSnapshot dsp : dataSnapshot.getChildren()) {DebugLog.d("\n test: " + dsp.toString());}}但我想使用 for 循环并获取最后一个位置并再次触发查询。我不想像下面这样使用代码:i=0;for (DataSnapshot dsp : dataSnapshot.getChildren()) {                        i++;if(i==datasnapt.getchildren){   //fire a api }}任何人都有解决方案,然后请给我答案。
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

要从DataSnapshot对象中获取最后一个位置,您可以使用以下代码行计算子项:


long count = dataSnapshot.getChildrenCount();

您的最后一项将位于:


int lastPosition = (int) count - 1;

如果要使用 for 循环,请使用以下代码:


ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        List<YourClass> list = new ArrayList<>();

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

            YourClass yourClass = ds.getValue(YourClass.class);

            list.add(yourClass);

        }


        YourClass lastItem = list.get(list.size() - 1);

    }


    @Override

    public void onCancelled(DatabaseError databaseError) {}

};

query.addListenerForSingleValueEvent(valueEventListener);

通过这种方式,您可以从最后一个位置或任何其他位置获取项目。我曾经YourClass举过例子。您YourClass可以是 String 类或任何其他模型类



查看完整回答
反对 回复 2021-06-23
?
慕仙森

TA贡献1827条经验 获得超7个赞

如果您只想从数据库中获取Channel节点的最后一行,请尝试以下代码。


DatabaseReference databaseReference = Firebase.getInstance().getReference();



databaseReference.child(getUserDetails().getUserId()).child("channels").orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {


    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

        // here dataSnapshot is the value of last position.


    @Override

    public void onCancelled(DatabaseError databaseError) {

        //Handle possible errors.

    }

});


查看完整回答
反对 回复 2021-06-23
  • 3 回答
  • 0 关注
  • 108 浏览

添加回答

举报

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