如何从Firebase和setText检索数据到TextView?

时间:2019-06-16 11:52:59

标签: android firebase firebase-realtime-database

我尝试从firebase和setText检索数据到TextViews,但是它不起作用。我尝试了不同的方法。我没有收到错误,字符串也不为空,但是文本没有显示。我使用了这些方法,并在另一个项目中使用了它们。我究竟做错了什么?

代码如下:

drawerLayout = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    View headerView = navigationView.getHeaderView(0);
    navUsername = headerView.findViewById(R.id.navUsername);
    navEmail = headerView.findViewById(R.id.navEmail);

    ActionBarDrawerToggle toogle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawerLayout.addDrawerListener(toogle);
    toogle.setDrawerIndicatorEnabled(true);
    toogle.syncState();
    if(savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new ArtFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_art);
    }

    auth = FirebaseAuth.getInstance();
    currentUser = auth.getCurrentUser();
    String uid = currentUser.getUid();

    refUsername = FirebaseDatabase.getInstance().getReference().child("users").child(uid);

    refUsername.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {

                User user = dataSnapshot.getValue(User.class);

                navUsername.setText(user.getUsername());
                navEmail.setText(user.getEmail());


                }

            }



        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
}

Firebase json示例:

users
   uid
     email: ""
     password:""
     username:""

这是User.class:

public class User {
    String username, email, password;

    public User(String username, String email, String password){
        this.username = username;
        this.email = email;
        this.password = password;
    }
    public User(){}

    public void setUsername(){
        this.username = username;
    }
    public String getUsername(){
        return username;
    }
    public void setEmail(){
        this.email = email;
    }
    public String getEmail(){
        return email;
    }
    public void setPassword(){
        this.password = password;
    }
    public String getPassword(){
        return password;
    }
}

2 个答案:

答案 0 :(得分:0)

当您的Firebase字段名称与POJO类成员名称不匹配时,会发生此类错误。

就像您提到的Firebase数据库结构一样

users
   uid
     email: ""
     password:""
     username:""

但是在您的POJO(在这种情况下为User类中)中,成员变量的名称可能不相同,然后库会默默地跳过不匹配的字段而不会出现任何错误

第二种情况,如果您的POJO包含空构造函数

答案 1 :(得分:0)

我可以看到您正在尝试为本地用户获取数据

currentUser = auth.getCurrentUser();
String uid = currentUser.getUid();

refUsername = FirebaseDatabase.getInstance().getReference().child("users").child(uid);

您是否已从Firebase数据库中检查该记录是否存在?您可以记录uid的值,然后从Firebase的users节点下检查

相关问题