我有一个类UserName
,该类已创建,目的是在提供用户ID时返回用户名。问题是我无法在匿名类userName
中更改实例变量ValueEventListener
。匿名类中的Log.i()
函数成功打印了正确的用户名,但通过getUserName()
函数返回变量时,它返回空字符串变量。我如何在任何[[匿名类中更改这样的实例变量?
public class UserName {
String userName;
public UserName(String userID){
DatabaseReference dbRefUsers = FirebaseDatabase.getInstance().getReference("Users");
Query queryGetUserName = dbRefUsers.orderByChild("userID").equalTo(userID);
queryGetUserName.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
for(DataSnapshot dataSnapshotCurrent: dataSnapshot.getChildren()){
User userCurrent = dataSnapshotCurrent.getValue(User.class);
userName = userCurrent.getName();
Log.i("userName",userName);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
public String getUserName() {
return userName;
}
}
getUserName
AFTER,则会调用您的onDataChange
方法。
JButton
和ActionListener
说明的例子public class UserName {
private String userName;
private JButton button = new JButton();
public UserName(){
button.addActionListener(e -> userName = "bob");
}
如果我这样做
UserName userName = new UserName(); System.out.println(userName.getUserName());
它打印为空。但是如果我这样做
UserName userName = new UserName(); userName.getButton().doClick(); System.out.println(userName.getUserName());
然后打印“ bob”所以您的问题可能是您在
getUserName
之前调用了onDataChange
,或者您的onDataChange
方法未设置该值,因为它没有进入if
语句,或者您的dataSnapshot.getChildren()
为空] >