我正在尝试从我的Firebase数据库中检索应用程序上用户自己设置的自定义用户名。我有一些可以正常运行的代码,但是我不完全知道将TextView
设置为等于什么才能获取代码正在检索的数据。
这是从Firebase数据库获取用户名的方法。
public void getUser(final MyCallback callback) {
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.child("Users").child(uid).child("userName").getValue(User.class);
if (null!=callback) callback.onSuccess(user);
}
@Override
public void onCancelled(DatabaseError databaseError) {
//Log.d(TAG, "onCancelled: Error: " + databaseError.getMessage());
}
});
}
然后我有一个处理回调的接口
public interface MyCallback{
void onSuccess(User user);
}
最后,我在要通过此代码显示用户名的地方使用getUser()
空格。
final TextView navuserName = findViewById(R.id.navUsername);
getUser(new MyCallback() {
@Override public void onSuccess(User u) {
navuserName.setText("hello");
}
});
在navuserName.setText("hello");
所在的位置,我希望显示用户名。但是我不知道为了获得String
空缺而获得的getUser()
,在括号之间应该放什么。
这是我的数据库设置方式
{"BP07KgV4yHa0bqpt740kuFzJQGI2" : {
"email" : "sampleEmail@gmail.com",
"userName" : "testUsername"
答案 0 :(得分:0)
在您的User类中,您需要字段的getter和setter,在这种情况下,用户名。 像这样将它们添加到String变量中,该变量用于在User类中存储用户名:
private String username;
public String getusername()
{
return this.username;
}
public void setusername(String value)
{
this.username= value;
}
// If you don't want User class to be initialized without passing a user name then you can add user name to it's constructor
public class User ( String username )
{
this.username = username;
}
要从Firebase中获取用户,您应在本例uid节点中引用所有数据。但是,如果您只想获取用户名,则应该这样使用它:
User user = new User();
String username;
username = (String) dataSnapshot.child("Users").child(uid).child("userName").getValue();
user.setusername(username);
要获取数据以传递到TextView,请使用user.getusername()