Android Firebase正在检索单个文本数据并在textview中进行设置
我一直试图只检索firebase中保存的用户名数据,并将其显示在导航抽屉的文本视图中,但我要么不断出现错误,应用程序崩溃,要么在文本视图中什么都没有显示,应用程序没有崩溃。应用程序不会使用此代码崩溃 这是我的数据库 数据模型Android Firebase正在检索单个文本数据并在textview中进行设置,android,database,firebase,firebase-realtime-database,textview,Android,Database,Firebase,Firebase Realtime Database,Textview,我一直试图只检索firebase中保存的用户名数据,并将其显示在导航抽屉的文本视图中,但我要么不断出现错误,应用程序崩溃,要么在文本视图中什么都没有显示,应用程序没有崩溃。应用程序不会使用此代码崩溃 这是我的数据库 数据模型 public class users { private String userID; private String userEmail; private String userName; private String userUsern
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) {
}
});
**更新***强文本*****
它似乎只有在我有这样的数据库和下面的代码时才起作用
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 = mDatabase.child(userID);
usernameRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String names=dataSnapshot.child("userUsername").getValue().toString();
username.setText(names);
}
快照将是
用户ID
,然后您不需要迭代,只需访问它,因为它是直接的子对象。如果我是您,我使用uid
作为唯一标识,而不是由push()
方法生成的push键。为此,请更改以下代码行:
String id = mDatabase.push().getKey();
users Users = new users(id, Email, Name, Username);
mDatabase.child(id).setValue(Users);
与:
要从数据库中获取数据,请使用字符串类使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String userEmail = dataSnapshot.child("userEmail").getValue(String.class);
String userID = dataSnapshot.child("userID").getValue(String.class);
String userName = dataSnapshot.child("userName").getValue(String.class);
String userUsername = dataSnapshot.child("userUsername").getValue(String.class);
Log.d("TAG", userEmail + " / " + userID + " / " + userName + " / " + userUsername);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
如果要使用模型类,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
users u = dataSnapshot.getValue(users.class);
String userEmail = u.getUserEmail();
String userID = u.getUserID();
String userName = u.getUserName();
String userUsername = u.getUserUsername();
Log.d("TAG", userEmail + " / " + userID + " / " + userName + " / " + userUsername);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
在这两种情况下,删除所有您需要的数据并添加新数据。您已经在
usernameRef
上添加了侦听器,它指向/users/
,因此您应该只使用usernamE=dataSnapshot.getValue(users.class)
。如果您只需要userUsername
,将侦听器添加到/users//userUsername
仍然会导致崩溃:(这种方式仍然会导致应用程序崩溃。我在本文中添加了一个更新。我想这可能与firebase push()函数有关…?谢谢anyway@user8360723不检查编辑现在它将工作,我在这里写child(“用户名”)
而不是child(“useruserusername”)
yeaa注意到lol我有很多“用户名”变量…无论如何,它仍然会导致应用程序崩溃。只有当我的数据库中没有用户id密钥时,它才起作用可能没有CurrentUsers这就是答案!
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
users u = dataSnapshot.getValue(users.class);
String userEmail = u.getUserEmail();
String userID = u.getUserID();
String userName = u.getUserName();
String userUsername = u.getUserUsername();
Log.d("TAG", userEmail + " / " + userID + " / " + userName + " / " + userUsername);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);