我尝试从firebase和setText检索数据到TextViews,但是它不起作用。我尝试了不同的方法。我没有收到错误,字符串也不为空,但是文本没有显示。我使用了这些方法,并在另一个项目中使用了它们。我究竟做错了什么?
代码如下:
drawerLayout = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
View headerView = navigationView.getHeaderView(0);
navUsername = headerView.findViewById(R.id.navUsername);
navEmail = headerView.findViewById(R.id.navEmail);
ActionBarDrawerToggle toogle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,
R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(toogle);
toogle.setDrawerIndicatorEnabled(true);
toogle.syncState();
if(savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new ArtFragment()).commit();
navigationView.setCheckedItem(R.id.nav_art);
}
auth = FirebaseAuth.getInstance();
currentUser = auth.getCurrentUser();
String uid = currentUser.getUid();
refUsername = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
refUsername.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
User user = dataSnapshot.getValue(User.class);
navUsername.setText(user.getUsername());
navEmail.setText(user.getEmail());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Firebase json示例:
users
uid
email: ""
password:""
username:""
这是User.class:
public class User {
String username, email, password;
public User(String username, String email, String password){
this.username = username;
this.email = email;
this.password = password;
}
public User(){}
public void setUsername(){
this.username = username;
}
public String getUsername(){
return username;
}
public void setEmail(){
this.email = email;
}
public String getEmail(){
return email;
}
public void setPassword(){
this.password = password;
}
public String getPassword(){
return password;
}
}
答案 0 :(得分:0)
当您的Firebase字段名称与POJO类成员名称不匹配时,会发生此类错误。
就像您提到的Firebase数据库结构一样
users
uid
email: ""
password:""
username:""
但是在您的POJO(在这种情况下为User
类中)中,成员变量的名称可能不相同,然后库会默默地跳过不匹配的字段而不会出现任何错误
第二种情况,如果您的POJO包含空构造函数
答案 1 :(得分:0)
我可以看到您正在尝试为本地用户获取数据
currentUser = auth.getCurrentUser();
String uid = currentUser.getUid();
refUsername = FirebaseDatabase.getInstance().getReference().child("users").child(uid);
您是否已从Firebase数据库中检查该记录是否存在?您可以记录uid
的值,然后从Firebase的users
节点下检查