同时获取两个firebase数据库子项

时间:2017-02-23 10:37:23

标签: android firebase firebase-realtime-database

我有我的ProfilePage.class,它将显示用户的个人资料,但我有一个问题,因为我有两种不同类型的用户。其中一个是普通用户,另一个是businessUser。我如何调用数据库的两个子项并在xml布局中显示某些信息,具体取决于用户的类型到目前为止,我在下面有这个但是它无法正常工作。

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile_page_both);

    mAuth = FirebaseAuth.getInstance();


    mDatabase = FirebaseDatabase.getInstance().getReference().child("user");
    mDatabaseBuisness = FirebaseDatabase.getInstance().getReference().child("businessAcc");

     mNormalUserProfilePic = (ImageView) findViewById(R.id.normalUserProfilePic);
     mNormalUserEmail = (TextView) findViewById(R.id.normalUserEmail);
     mNormalUserProfile = (TextView) findViewById(R.id.normalUserProfile);
     mBusinessUserPostcode = (TextView)findViewById(R.id.businessPostcode);



   String uid = mAuth.getCurrentUser().getUid();



    mDatabase.child(uid).addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {



                String profile_username = (String) dataSnapshot.child("username").getValue();
                String profile_image = (String) dataSnapshot.child("image").getValue();
                String profile_uid = (String) dataSnapshot.child("uid").getValue();
                String profile_email = (String) dataSnapshot.child("email").getValue();


                mNormalUserEmail.setText(profile_email);
                mNormalUserProfile.setText(profile_username);

                Picasso.with(ProfilePageNormalUser.this).load(profile_image).into(mNormalUserProfilePic);



            }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }

    });

    mDatabaseBuisness.child(uid).addValueEventListener(new ValueEventListener() {


        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {



            String profile_username = (String) dataSnapshot.child("username").getValue();
            String profile_image = (String) dataSnapshot.child("image").getValue();
            String profile_uid = (String) dataSnapshot.child("uid").getValue();
            String profile_email = (String) dataSnapshot.child("email").getValue();
            String profile_postcode = (String) dataSnapshot.child("postCode").getValue();


            mNormalUserEmail.setText(profile_email);
            mNormalUserProfile.setText(profile_username);
            mBusinessUserPostcode.setText(profile_postcode);

            Picasso.with(ProfilePageNormalUser.this).load(profile_image).into(mNormalUserProfilePic);



        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }

    });

这是数据库结构:

enter image description here

2 个答案:

答案 0 :(得分:0)

您正在重新启动问题的Firebase参考。解决您的问题。

首先采用根参考。

DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();

然后从根引用创建两个单独的引用。

DatabaseReference usersRef = mRootRef.child("users");
DatabaseReference buisnessAccRef = mRootRef.child("businessAcc");

现在你可以使用这些参考文献来完成你的工作。

答案 1 :(得分:-1)

是的,我知道你到底是什么意思 您可以按以下方式使用snapMap:

Map<String,String>snapMap = mapOf("from","","to","","imageUrl","","ImageName","");

FirebaseDatabase.getInstance().getReference().child("users")
                     .child(keys.get(position)).child("snaps").push().setValue(snapMap);

// push is for generate a random id 
// you can put your value insted of empty string