Значение восстановления базы данных Firebase, возможно ли это - PullRequest
0 голосов
/ 22 мая 2018

У меня есть этот код:

DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference("allmessages");
        mdatabase.child(mAuth.getCurrentUser().getUid()).child(userID).child(uploadID).push().setValue("somevalue");

Тогда в другом классе у меня есть этот код:

DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference("allmessages");
 mdatabase.child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //Loop through all files in Uploads DataBase
            for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                AllChatMessagesGet allChatMessagesGet = postSnapshot.getValue(AllChatMessagesGet.class);

могу ли я получить все значения в mdatabase.child(mAuth.getCurrentUser().getUid()).child(userID).child(uploadID).push().setValue("somevalue"); с помощьюкод, который я использовал выше.

Потому что он мне ничего не возвращает.Я думал, что приведенный выше код в addValueEventListener пройдет через все дочерние классы mAuth.getCurrentUser().getUid() и вернет мне «somevalue».

Но это не так.Итак, как мне получить «somevalue».Есть ли другой путь?потому что коды написаны в разных классах, и я не знаю, как получить .Child(userID) и .Child(uploadID), это было бы проблематично для меня.значения, которые существуют на несколько child ниже его.

Database Structure

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Я написал код, чтобы увидеть его в коде ниже.То, что я делал, получало ценность от узла пользователей.Я отозвал всех его дочерних элементов по приведенному ниже коду, вы также можете попытаться сделать то же самое, возможно, это поможет вам.

mFirebaseUserReference = FirebaseDatabase.getInstance().getReference();
 userReference = mFirebaseUserReference.child("Users");

        childEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Log.d("Values",dataSnapshot+"");
                HashMap temp = (HashMap) dataSnapshot.getValue();
                if (temp!=null){
                    if (!temp.get("id").equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){
                        SignInModel signInModel = new SignInModel();
                        signInModel.setPhotoUrl((String)temp.get("photoUrl"));
                        signInModel.setEmail((String)temp.get("email"));
                        signInModel.setName((String)temp.get("name"));
                        signInModel.setId((String)temp.get("id"));
                        arrayList.add(signInModel);
                        adapter.notifyDataSetChanged();
                    }
                }
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

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

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };

        userReference.addChildEventListener(childEventListener);

Надеюсь, что это поможет.

0 голосов
/ 22 мая 2018

Согласно вашим комментариям, чтобы получить те идентификаторы, которые начинаются с -LD в узле -LCzWNw0nlC3GKsnPH8B с использованием только rootRef.child("AllChatMessages").child(uid), используйте следующий код:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("AllChatMessages").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            for(DataSnapshot dSnapshot : ds.getChildren()) {
                for(DataSnapshot snap : dSnapshot.getChildren()) {
                    String key = snap.getKey();
                    Log.d("TAG", key);
                }
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);

Вывод будет всем темидентификаторы, которые вы ищете.

0 голосов
/ 22 мая 2018

Добавьте и внедрите ChildEventListener вместо ValueEventListener.Ваше «somevalue» должно быть в DataSnapshot переопределенного метода onChildChanged.

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