检索Firebase数据并将其分配给变量

时间:2016-02-20 20:06:47

标签: android firebase firebase-realtime-database

目前我正在尝试从我的Firebase数据中检索数据,然后我将用它来帮助在onCreate()方法中创建我的导航抽屉。

在我使用的Mike Penz Material Drawer library中,我可以选择为AccountHeader指定帐户信息,例如姓名和电子邮件,所以我试图尝试在创建导航抽屉之前,从我的Firebase数据库中的用户表中检索这些详细信息。

不幸的是,使用addValueEventListener()addListenerForSingleValueEvent()并不能满足我的需要,因为变量(userEmail,userRole,userName)仅在创建导航抽屉后被赋值。

if(authData != null) {
        firebase.child("users").child(authData.getUid()).addValueEventListener(new ValueEventListener() {

            @Override
            public void onDataChange(DataSnapshot 
                Users user = snapshot.getValue(Users.class);                    
                userEmail = authData.getProviderData().get("email").toString();
                userRole = user.getRole();
                if (user.getFirstName() != null && user.getLastName() != null) {
                    userName = user.getFirstName() + " " + user.getLastName();
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                System.out.println("The read failed: " + firebaseError.getMessage());
            }
        });

我已经在此addValueEventListener方法中记录了变量的值,并且在此方法之后,所以我知道变量正在检索值,但仅在创建导航抽屉之后而不是之前。

希望我已经为某人提供了足够的信息,以便能够帮助我解决这个问题,如果我还没有让我知道你在评论中需要什么。

1 个答案:

答案 0 :(得分:2)

我假设您询问如何在创建后向Drawer添加项目。即使在创建之后,也可以更新删除添加项目到Drawer。有关详情,请点击此处https://github.com/mikepenz/MaterialDrawer#modify-items-or-the-drawer

编辑:

    AccountHeader header = new AccountHeaderBuilder()
            .withActivity(this)
            .withHeaderBackground(R.drawable.header)
            .withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
                @Override
                public boolean onProfileChanged(View view, IProfile profile, boolean current) {
                    //Handle Profile changes
                    return false;
                }
            })
            .build();

    Drawer drawer = new DrawerBuilder()
            .withActivity(this)
            .withToolbar(toolbar)
            .withAccountHeader(header)
            .addDrawerItems(
                    new DividerDrawerItem(),
                    new SecondaryDrawerItem().withName(R.string.drawer_item_settings),
                    new SecondaryDrawerItem().withName(R.string.drawer_item_about)
            )
            .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
                @Override
                public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
                    // Handle clicks
                    return true;
                }
            })
            .build();

    //Later
    header.addProfile(new ProfileDrawerItem().withIcon(bitmap).withName(name).withEmail(email), 0);

这是如何运作的?