当前位置: 首页 > 知识库问答 >
问题:

Firebase实时数据库getvalue()未映射对象

晋坚
2023-03-14

这是我的firebase聊天结构(见下图)。我只想获得amitpal_name值,而不是其他值,而是这个方法来获取所有值
我也使用了这个

DBreference=FireBaseDatabase.GetInstance().GetReference(“ChatMessage”).Child(“Msg”);

    dbreference.orderByChild("Ref").addChildEventListener( new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {[![enter image description here][1]][1]
           Iterator iterator=dataSnapshot.getChildren().iterator();
            while (iterator.hasNext()){
                String chatis=(String) ((DataSnapshot)iterator.next()).getValue();
                Log.e( "ADDED IS-" , chatis);
            }

        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            Iterator iterator=dataSnapshot.getChildren().iterator();
            while (iterator.hasNext()){
                String chatis=(String) ((DataSnapshot)iterator.next()).getValue();
                Log.e( "ADDED chng-" , chatis);
            }
        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.e( "ERRO FBDB-", databaseError.getMessage());

        }
    } );

DBreference=FireBaseDatabase.GetInstance().GetReference(“ChatMessage”).Child(“Msg”).Child(“AmitPal_Name”);

我也尝试了下面这个方法,给了我很好的预期的效果,但主要的问题是我想在不使用服务的情况下,在firebaserealtime聊天中,当数据库更新时,在listview中反映新的值,所以我需要下面这个方法

public void onChildChanged(@nonnull DataSnapshot DataSnapshot,@nullable String%s)

共有1个答案

夏意蕴
2023-03-14

这是你的推荐信

    refAmitPat = FirebaseDatabase.getInstance().getReference().child("ChatMessage").child("msg");

下面是DB引用上的子事件列表

refAmitPat.child("amitpal_name").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                Log.d("amitPal",dataSnapshot.getValue()+"");
                // add message value to list and call notify datasetchange method 
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                Log.d("amitPal",dataSnapshot.getValue()+"");
            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

您正在做的是,错误的是,您正在迭代datasnapshot,而当您将消息推入usernames下作为childAdded方法中的datasnapshot,这意味着您正在迭代的数据快照,实际上是您的带有push-key和message值的消息。所以不需要迭代。只需调用DataSnapShot.getValue()函数即可获得消息值

 类似资料:
  • 我在一个Android应用程序中使用Firebase数据库,每次用户启动时,我都会在数据库中存储一些值,为此我会执行以下操作: 正如您在子方法中看到的,如果称为“usrId”,它将创建usrId目录,并在其中添加所有neccesary信息。但是我想为每个用户创建目录,所以我尝试传递usrId变量作为参数。但它不起作用。当我调试代码时,调试器说本地var usrId无法识别,我的问题是如何在Fire

  • 我有一个应用程序,存储256行数字,指示网格视图中每个256个单元格的背景颜色。目前所有的值都是-16449536,表示简单的黑色。 以下是我在Firebase数据库中的JSON结构 在onCreative方法中,我使用for循环为每个单元格读取256次: 并非所有网格都是黑色的。每次我重新打开应用程序以触发onCreate方法时,网格模式都会有所不同。我是否达到了firebase实时数据库的某些

  • 我在XCode中编写了一个方法,在firebase实时数据库中保存“用户”。不幸的是,数据没有显示在我的浏览器中的实时数据库中,尽管我通过内置的打印命令从Xcode得到了反馈,一切都很顺利。有人知道吗?我真的很高兴听到你的消息。最美好的祝福 PS:是的:读取和写入在我的数据库规则中被激活。

  • 所以我正在制作约会应用程序,现在我需要为用户创建一个匹配的人员列表。 因此,我需要一个firebase查询来查看性别,并检查是否已经匹配,如果匹配,则不应将其包括在列表中。 我试着按性别过滤数据。如何编辑此查询以检查它们是否已匹配?匹配项显示在用户/{userID}/Matches/{matchedUserID}中 这是我尝试的:

  • 我需要将数据从Firebase实时数据库切换到Firestore DB。我该怎么做? 视频主要关注实时db,但我认为由于我没有激活实时db,它会转到Firestore。但我让它工作的唯一方法是启用实时db。所以我可以在Firebase中插入和读取数据,但我需要它在Firestore中。 任何帮助都是非常感激的。