Android 在Firebase数据库的警报对话框中显示用户数据

Android 在Firebase数据库的警报对话框中显示用户数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,当用户的个人资料被点击时,我试图在警报对话框中显示用户的信息。我能够在单击时显示对话框,但对话框为空。用户数据存储在Firebase实时数据库中。Iv发布了Im使用的代码,并在代码中添加了注释。我猜问题是数据库引用还是DataSnapshot //Variables usersDb = FirebaseDatabase.getInstance().getReference().child("Users"); mAuth = FirebaseAuth.getInstance

当用户的个人资料被点击时,我试图在警报对话框中显示用户的信息。我能够在单击时显示对话框,但对话框为空。用户数据存储在Firebase实时数据库中。Iv发布了Im使用的代码,并在代码中添加了注释。我猜问题是数据库引用还是DataSnapshot

    //Variables
    usersDb = FirebaseDatabase.getInstance().getReference().child("Users");
    mAuth = FirebaseAuth.getInstance();
    currentUId = mAuth.getCurrentUser().getUid();

    // OnItemClickListener
    flingContainer.setOnItemClickListener(new SwipeFlingAdapterView.OnItemClickListener() {
        @Override
        public void onItemClicked(int itemPosition, Object dataObject) {

               // users profile card 
            cards obj = (cards) dataObject;
            final String userId = obj.getUserId();

            final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

            DatabaseReference userbio = usersDb.child(userId).child("Bio");
            userbio.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                        if (dataSnapshot.child(userId).child("Bio").getValue() != null){
                        userBio = dataSnapshot.child("Bio").getValue().toString();
                    }
                }
                }

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

                }
            });

            builder.setTitle("Bio");
            builder.setMessage(userBio);
            // Set click listener for alert dialog buttons
            DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    switch(which){
                        case DialogInterface.BUTTON_POSITIVE:
                            // User clicked the Yes button
                            break;

                        case DialogInterface.BUTTON_NEGATIVE:
                            // User clicked the No button
                            break;
                    }
                }
            };
            // Set the alert dialog yes button click listener
            builder.setPositiveButton("Yes", dialogClickListener);
            // Set the alert dialog no button click listener
            builder.setNegativeButton("No",dialogClickListener);
            AlertDialog dialog = builder.create();
            // Display the alert dialog on interface
            dialog.show();
        }
    }); }

我解决了这个问题。我在下面添加了正确的代码

             DatabaseReference databaseReference = usersDb.child(userId);
             databaseReference.addValueEventListener(new ValueEventListener() 
                  {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
                   {
                     if (dataSnapshot.exists()) {
                         if (dataSnapshot.child("Bio").getValue() != null) {
                             userBio = dataSnapshot.child("Bio").getValue().toString();
                         }
                     }}
                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {

                 }
             });
            final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

            builder.setTitle("Bio");
            builder.setMessage(userBio);

可能是因为您调用了两次
child(“Bio”)
,首先是在DatabaseReference中,然后是在DataSnapshot中。尝试从其中一个中删除它。

这不起作用。从引用中删除子项会导致崩溃,而从DataSnapshot中删除子项只会显示一个空警报对话框。您可以发布Firebase数据库结构的图片,说明您要获取的数据吗?我添加了数据库的屏幕截图。实际上,您是对的。在从数据库引用中删除子项并稍微更改代码后,我让它开始工作。太棒了!我很高兴它成功了!请将您的数据库结构添加为JSON文件或至少一个屏幕截图。好的,我添加了我的数据库的屏幕截图。还请扩展这些封闭对象中的内容。我会做的!我发布了另一个屏幕截图,对象已展开。我现在看到了。问题是您不能在回调之外简单地使用
userBio
,因为该属性的值尚未加载。请检查副本以了解为什么会出现这种行为,以及如何使用自定义回调解决此问题。