从Firebase收到有效数据后,为什么会收到空字符串?

时间:2019-01-02 19:51:27

标签: java android firebase firebase-realtime-database

我正在使用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。这些值都可以从同一实时数据库的不同树结构中访问。

现在,在ifelse-if语句的末尾,我通过传入用户名,个人资料图像和讨论变量来创建并实例化MessagesObject。然后,我将此对象添加到名为List<MessagesObject>的{​​{1}}中。然后,我通知我的自定义适配器resultMessages数据已更改。

就像我说的那样,其他所有代码都可以正常工作。只是当我传递mMessagesAdapterusernamediscussion时,它总是传递一个空字符串。我通过使用调试器知道这一点。

那是为什么?它不应该那样做。

0 个答案:

没有答案