通过回调检索数据

时间:2018-10-19 02:40:05

标签: java android firebase firebase-realtime-database callback

我正在尝试从我的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"

1 个答案:

答案 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()