首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象不是使用valueEventListerner从数据链中获取而是工作查找,而是使用AddChildEventListern。

对象不是使用valueEventListerner从数据链中获取而是工作查找,而是使用AddChildEventListern。
EN

Stack Overflow用户
提问于 2019-10-22 08:04:04
回答 1查看 40关注 0票数 0

当我试图从addChildListerner( DataSnapshot )获取对象时,它工作得很好,并将DataSnapshot分配给Object

这种工作状态:

代码语言:javascript
复制
  myRef = database.getReference("Chat").child(Combine);
    myRef.orderByKey().limitToLast(1).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            ChatData user = dataSnapshot.getValue(ChatData.class);
            userChild.add(user);

但是当我尝试使用ValueListerner(快照)应用程序崩溃获取相同的对象时,我使用了所有的snapshot.getChildern ()snapshot.getValue,然后是应用崩溃。

错误与

代码语言:javascript
复制
myRef = database.getReference("Chat").child(Combine);
myRef.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        ChatData user = dataSnapshot.getValue(ChatData.class);
                        userChild.add(user);

                }

我想检索ChatData user = dataSnapshot.getValue(ChatData.class);userChild.add(user);

代码语言:javascript
复制
Debug time : 

         DataSnapshot { key = 
                     1123469ACDEFFFFGJKLNOOOPQSTUUVWZabccdehhkkloopqruuuuwxyy, 
                     value
                           = {-LrjsM3ZO0pzQbvCcRuQ
                           ={time=Tue Oct 22 00:53:10 GMT+05:00 2019
                           , msg=hi
                            , user_ID=LuFro93OCcPEpoFTKuQhUkeuw462}} 
                              }

如何获得此值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-22 13:23:11

当您对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

在第一个示例中,Firebase客户端处理列表,并为每个结果调用onChildAdded。但是使用ValueEventListener,您可以得到一个包含所有结果的快照。因此,您的onDataChange将需要处理这个列表,这是通过迭代DataSnapshot.getChildren()来完成的。

就像这样:

代码语言:javascript
复制
myRef.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            ChatData user = userSnapshot.getValue(ChatData.class);
            userChild.add(user);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58499651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档