【发布时间】:2018-03-17 21:10:41
【问题描述】:
我一直在尝试仅检索保存在 firebase 中的用户名数据并将其显示在导航抽屉的文本视图中,但我要么不断收到错误和应用程序崩溃,要么在文本视图中没有显示任何内容并且应用程序不会崩溃.此代码不会导致应用崩溃。
这是我的数据库
数据模型
public class users {
private String userID;
private String userEmail;
private String userName;
private String userUsername;
public users() {
}
public users(String userID, String userEmail, String userName, String userUsername) {
this.userID = userID;
this.userEmail = userEmail;
this.userName = userName;
this.userUsername = userUsername;
}
public String getUserID() {
return userID;
}
public String getUserEmail() {
return userEmail;
}
public String getUserName() {
return userName;
}
public String getUserUsername() {
return userUsername;
}
public void setUserID(String userID) {
this.userID = userID;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setUserUsername(String userUsername) {
this.userUsername = userUsername;
}
}
主要活动
//ASSIGNING FIREBASE OBJECTS.
mAuth = FirebaseAuth.getInstance();
mFire = FirebaseDatabase.getInstance();
user = mAuth.getCurrentUser();
userID = user.getUid();
mDatabase = mFire.getReference("users");
usernameRef = mDatabase.child(userID);
//METHODS
checkIfUserSignedIN();
InitImgLoader();
setProfileImg();
//NAVIGATION LAYOUT.
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
//HEADER VIEW LAYOUT.
username = findViewById(R.id.Username_onDrawer);
View headView = navigationView.getHeaderView(0);
ImageView pp = headView.findViewById(R.id.profile_image);
pp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(MainActivity.this, ProfileActivity.class);
startActivity(i);
}
});
usernameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.child("userUsername").getChildren()){
users usernamE = new users();
usernamE.setUserUsername(ds.child(userID).getValue(users.class).getUserUsername());
username.setText(usernamE.getUserUsername());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
I'm trying to set username below this image view
**更新!***强文本***** 只有当我使用以下代码拥有这样的数据库时,它似乎才有效..
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String UserUserName = String.valueOf(dataSnapshot.child("userUsername").getValue());
username.setText(UserUserName);
}
这就是我将数据保存到 firebase 的方式
//USER SIGNUP INFORMATION METHOD.
private void push(){
String Email = email.getText().toString().trim();
String Name = name.getText().toString().trim();
String Username = userName.getText().toString().trim();
String id = mDatabase.push().getKey();
users Users = new users(id, Email, Name, Username);
mDatabase.child(id).setValue(Users);
【问题讨论】:
-
你已经在
usernameRef上添加了监听器,它指向/users/<userId>,所以你应该只使用usernamE = dataSnapshot.getValue(users.class)。如果您只需要userUsername,请将侦听器添加到/users/<userId>/userUsername -
仍然导致崩溃:(
标签: android database firebase firebase-realtime-database textview