这是我的Firebase聊天结构(请参见下图)。我只想获取amitpal_name值而不是其他值,但是此方法将我的所有值都提取了
我也曾经用过

android - Firebase Realtime数据库getvalue()未映射对象-LMLPHP

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 Chat中更新数据库时,我想在listview中反映新值,为此我需要以下方法

公共无效onChildChanged(@NonNull DataSnapshot dataSnapshot,@Nullable String s)

最佳答案

这是您的参考

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


这是您的数据库参考上的子事件列表器

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) {

            }
        });


您正在做什么,错的是,您正在迭代数据快照,而当您将消息作为用户的身份推送到用户名下时,该子对象将作为childAdded方法中的datasnapshot获得,这意味着您正在迭代的数据快照实际上是通过push-键和消息值。因此无需进行遍历。只需调用datasnapshot.getValue()函数即可获取消息值

关于android - Firebase Realtime数据库getvalue()未映射对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55016979/

10-09 23:19
查看更多