Почему я получаю пустые строки после получения достоверных данных от Firebase? - PullRequest
0 голосов
/ 02 января 2019

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

Теперь, когда я использую реальные данные из Firebase, возникают проблемы.

Это то, что у меня есть для кода:

public String username = "";
public String profileImage = "";
public String discussion = "";
private void FetchMatchInformation(final String key, final String choice) {
    DatabaseReference matchDb = FirebaseDatabase.getInstance().getReference().child("answers").child(key);

    matchDb.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                String opposite = postSnapshot.getValue(String.class);
                if(opposite.equals("agree") && choice.equals("disagree")) {
                    DatabaseReference found = FirebaseDatabase.getInstance().getReference().child("users").child(postSnapshot.getKey());
                    found.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                                if(postSnapshot.getKey().equals("username")) {
                                    username = postSnapshot.getValue(String.class);
                                }
                                if(postSnapshot.getKey().equals("providerId")) {
                                    String provider = postSnapshot.getValue(String.class);
                                    if(provider.equals("google.com")) {
                                        Uri photoUrl = FirebaseAuth.getInstance().getCurrentUser().getPhotoUrl();
                                        String originalPieceOfUrl = "s96-c/photo.jpg";
                                        String newPieceOfUrlToAdd = "s400-c/photo.jpg";
                                        String photoPath = photoUrl.toString();
                                        String newString = photoPath.replace(originalPieceOfUrl, newPieceOfUrlToAdd);
                                        profileImage = newString;
                                    } else if(provider.equals("facebook.com")) {
                                        profileImage = FirebaseAuth.getInstance().getCurrentUser().getPhotoUrl().toString() + "?type=large";
                                    }
                                }
                            }
                        }

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

                        }
                    });
                    FirebaseDatabase.getInstance().getReference().child("debates").addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                                if(postSnapshot.getKey().equals(key)) {
                                    discussion = postSnapshot.getValue(String.class);
                                    break;
                                }
                                break;
                            }
                        }

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

                        }
                    });
                    MessagesObject objDisc = new MessagesObject(username, discussion, profileImage);
                    resultsMessages.add(objDisc);
                    mMessagesAdapter.notifyDataSetChanged();
                } else if(opposite.equals("disagree") && choice.equals("agree")) {
                    DatabaseReference found = FirebaseDatabase.getInstance().getReference().child("users").child(postSnapshot.getKey());
                    found.addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                                if(postSnapshot.getKey().equals("username")) {
                                    username = postSnapshot.getValue(String.class);
                                }
                                if(postSnapshot.getKey().equals("providerId")) {
                                    String provider = postSnapshot.getValue(String.class);
                                    if(provider.equals("google.com")) {
                                        Uri photoUrl = FirebaseAuth.getInstance().getCurrentUser().getPhotoUrl();
                                        String originalPieceOfUrl = "s96-c/photo.jpg";
                                        String newPieceOfUrlToAdd = "s400-c/photo.jpg";
                                        String photoPath = photoUrl.toString();
                                        String newString = photoPath.replace(originalPieceOfUrl, newPieceOfUrlToAdd);
                                        profileImage = newString;
                                    } else if(provider.equals("facebook.com")) {
                                        profileImage = FirebaseAuth.getInstance().getCurrentUser().getPhotoUrl().toString() + "?type=large";
                                    }
                                }
                            }
                        }

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

                        }
                    });
                    FirebaseDatabase.getInstance().getReference().child("debates").addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                                if(postSnapshot.getKey().equals(key)) {
                                    discussion = postSnapshot.getValue(String.class);
                                    break;
                                }
                                break;
                            }
                        }

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

                        }
                    });
                    MessagesObject objDisc = new MessagesObject(username, discussion, profileImage);
                    resultsMessages.add(objDisc);
                    mMessagesAdapter.notifyDataSetChanged();
                }
            }
        }

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

        }
    });

}

Итак, я получаю имя пользователя, изображение его профиля и выясняю значение, которое я назвал discussion после определения действительного ключа. Все эти значения доступны из разных древовидных структур из одной и той же базы данных реального времени.

Теперь, в конце оператора if или else-if, я создаю и создаю экземпляр MessagesObject, передавая имя пользователя, изображение профиля и переменные обсуждения. Затем я добавляю этот объект в List<MessagesObject> с именем resultMessages. Затем я уведомляю свой пользовательский адаптер mMessagesAdapter, что данные изменились.

Как я уже сказал, все остальные части кода работают отлично. Просто когда я передаю username, discussion и profileImage, он всегда пропускает пустую строку. Я знаю это по использованию отладчика.

Почему это? Так не должно быть.

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