Java Получение пользовательских данных из базы данных Firebase и сохранение в переменных Android Studio - PullRequest
0 голосов
/ 01 октября 2019

Я посмотрел всюду по stackoverflow и не могу найти свою проблему, что я пытаюсь найти, это идентификатор пользователя из базы данных, чтобы показать всех пользователей, которые находятся в сети, кроме этого пользователя, однако вся информация базы данных сохраняется, кромеидентификатор, приводящий к следующему сбою

E / UncaughtException: java.lang.NullPointerException: попытка вызвать виртуальный метод 'boolean java.lang.String.equals (java.lang.Object)' для нулевого значенияссылка на объект на USER.UsersFragment $ 1.onDataChange (UsersFragment.java:63).

Вот мой файл с пользователями

    public class User {
    private String id;
    private String username;
    private String first_name;
    private String last_name;
    private String birthday;
    private String email;
    private String imageURL;

    public User(String id, String username, String first_name, String last_name, String birthday, String email, String imageURL) {
        this.id = id;
        this.username = username;
        this.first_name = first_name;
        this.last_name = last_name;
        this.birthday = birthday;
        this.email = email;
        this.imageURL = imageURL;
    }

    public User() {

    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirst_name() {
        return first_name;
    }

    public void setFirst_name(String first_name) {
        this.first_name = first_name;
    }

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }
}

Вот как я храню свою информацию впеременные, строка, в которой происходит сбой, помечена как CRASH.

    final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("users");

        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                mUsernames.clear();
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    User user = snapshot.getValue(User.class);
                    assert user != null;
                    if(!user.getId().equals(firebaseUser.getUid())) { <-CRASH
                        mUsernames.add(user);
                    }
                    //Log.println(Log.DEBUG, "", user.getId());
                }

                userAdapter = new UserAdapter(getContext(), mUsernames);
                recyclerView.setAdapter(userAdapter);
            }

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

            }
        });

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Проблема в том, что в вашей базе данных имеется более одной записи. Но только одна запись содержит поле id.

Поэтому при извлечении данных она извлекается из узла, который не содержит узла id, и возвращает ошибку.

0 голосов
/ 01 октября 2019

В ваших записях базы данных нет поля с именем "id", что означает, что getId () всегда будет возвращать ноль. Данные просто отсутствуют.

Похоже, вы, вероятно, хотите использовать ключ снимка из snapshot.getKey().

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