如何在匿名类中更改实例变量

问题描述 投票:0回答:1

我有一个类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; } }
java android-studio instance-variables anonymous-class
1个回答
0
投票
该代码应该起作用,如果您调用getUserName

AFTER,则会调用您的onDataChange方法。

这里是用JButtonActionListener说明的例子

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()为空] >

© www.soinside.com 2019 - 2024. All rights reserved.