Как получить данные из Firebase и SetText для TextView? - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь получить данные из 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 голосов
/ 16 июня 2019

Я вижу, что вы пытаетесь получить данные для локального пользователя

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

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

Вы проверили из своей базы данных Firebase, существует ли эта запись?Вы можете записать значение uid, а затем проверить с вашей Firebase в узле users

0 голосов
/ 16 июня 2019

Этот тип ошибки возникает, когда имя ваших полей firebase не совпадает с именем членов классов POJO.

Как вы упомянули структуру вашей базы данных firebase следующим образом

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

Но в вашем POJO(User класс в данном конкретном случае), имя переменных-членов может не совпадать, тогда библиотека молча пропускает несоответствующие поля без ошибок

Второй случай, если ваш POJO содержит пустой конструктор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...