检索 Firebase 数据并将其分配给变量
Retrieving Firebase data and assigning it to variables
目前我正在尝试从我的 Firebase 数据中检索数据,稍后我将使用这些数据在 onCreate() 方法中帮助创建我的导航抽屉。
在我使用的 Mike Penz 的 Material Drawer library 中,有一个选项可以指定帐户信息,例如 AccountHeader 的名称和电子邮件,因此我正在尝试从我的用户那里检索这些详细信息 table 在创建导航抽屉之前在我的 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 方法内部和这个方法之后记录了变量的值,所以我知道变量正在检索值,但只是在我的导航抽屉创建之后而不是之前。
希望我已经提供了足够的信息让某人能够帮助我找到解决这个问题的方法,如果我没有在评论中让我知道你需要什么的话。
我假设您问的是如何在创建后向 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);
这是如何工作的?
目前我正在尝试从我的 Firebase 数据中检索数据,稍后我将使用这些数据在 onCreate() 方法中帮助创建我的导航抽屉。
在我使用的 Mike Penz 的 Material Drawer library 中,有一个选项可以指定帐户信息,例如 AccountHeader 的名称和电子邮件,因此我正在尝试从我的用户那里检索这些详细信息 table 在创建导航抽屉之前在我的 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 方法内部和这个方法之后记录了变量的值,所以我知道变量正在检索值,但只是在我的导航抽屉创建之后而不是之前。
希望我已经提供了足够的信息让某人能够帮助我找到解决这个问题的方法,如果我没有在评论中让我知道你需要什么的话。
我假设您问的是如何在创建后向 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);
这是如何工作的?