java - 如何更改匿名类中的实例变量

标签 java android firebase-realtime-database instance-variables anonymous-class

我有课UserName创建它的目的是在提供 userID 时返回 userName。问题是我无法更改实例变量 userName匿名类内部 ValueEventListenerLog.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;
    }
}

最佳答案

如果您在调用 onDataChange 方法之后调用 getUserName,则该代码应该可以工作。

这里是一个示例,说明它使用 JButtonActionListener 工作

public class UserName {
    private String userName;
    private JButton button = new JButton();

    public UserName() {
        button.addActionListener(e -> userName = "bob");
    }

    public String getUserName() {
        return userName;
    }
}

如果我这样做

UserName userName = new UserName();
System.out.println(userName.getUserName());

它打印 null。

但如果我这样做

UserName userName = new UserName();
userName.getButton().doClick();
System.out.println(userName.getUserName());

然后打印“bob”

所以您的问题可能是:

  • 您在 onDataChange 之前调用 getUserName
  • 或者您的 onDataChange 方法未设置该值,因为它没有进入 if 语句,或者您的 dataSnapshot.getChildren()为空,
  • 甚至最后一个子级中的用户的用户名是一个空字符串(请注意,您的代码始终返回最后一个子级中的用户名,这是有意的吗?)

关于java - 如何更改匿名类中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59251586/

相关文章:

java - 有没有更好的方法来连接两个 JPanel?

android - Flutter_Beacon库示例应用程序未检测到iBeacons

javascript - React firebase 在第一次加载时会重复数据,但在刷新时加载时不会重复数据

javascript - Firebase 如何从查询中获取父节点

java spring 4 @Transactional嵌套事务问题

google-bigquery - 在 java bigquery API 中使用标准 SQL 查询

android - 自动化 Java 到 Kotlin 的转换 : unresolved reference to 'ARG_LAYOUT_RES_ID'

ios - 基本 Firebase 数据库问题 (Xcode + Swift)

java - 埃斯珀表情不起作用

Java If 循环点击次数过多而无法重置