Getvalue () базы данных Firebase в реальном времени не отображает объект - PullRequest
1 голос
/ 06 марта 2019

Это моя структура чата Firebase (см. Изображение ниже).Я хочу получить только значение amitpal_name, а не другие, но этот метод извлекает мне все значения
Я также использовал это

enter image description here

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");

но он не предоставляет никакой информации или значений, пожалуйста, помогите мне здесь

Я также попробовал этот метод ниже, давая мне хороший и ожидаемый результат, но основная проблема заключается в том, что я хочу отразить новое значение в listview, когда обновление базы данных в firebaserealtimeЧат без использования сервиса, для этого мне нужен этот метод ниже

public void onChildChanged (@NonNull DataSnapshot dataSnapshot, @Nullable String s)

Ответы [ 2 ]

1 голос
/ 06 марта 2019

вот ваша ссылка

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

            }
        });

что вы делаете, неправильно, вы итерируете datasnapshot, в то время как когда вы отправляете сообщение под именем пользователя как child, дочерний элемент получает как datasnapshot в методе childAdded, что означает, что снимок данных, который вы повторяете, фактически является вашим сообщением с кнопкой и значением сообщения. так что нет необходимости повторять это. просто вызовите функцию datasnapshot.getValue (), чтобы получить значение сообщения

1 голос
/ 06 марта 2019

измените нижнюю строку

String chatis=(String) ((DataSnapshot)iterator.next()).getValue();

на

String chatis=((DataSnapshot)iterator.next()).getValue().toString();

Обновлен метод ниже

    @Override
    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Log.e( "OUTER ADDED IS-" , dataSnapshot.getValue().toString());
       Iterator iterator=dataSnapshot.getChildren().iterator();
        while (iterator.hasNext()){
        DataSnapshot local = (DataSnapshot) iterator.next();
            String chatis=local.getValue().toString();
            Log.e( "Inner ADDED IS-" , chatis);
        }

    }

РЕДАКТИРОВАТЬ

также под линией после инициализации ссылки

dbreference.keepSynced(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...