Метод non stati c getUid () не может быть ссылкой из контекста stati c - PullRequest
0 голосов
/ 04 апреля 2020

Я создаю рециркуляцию, которая отображает список всех пользователей в действии. Теперь я хочу, чтобы все пользователи, кроме текущего, вошли в систему.

Я пробовал это:

 final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
        // get path of database name "Users" containing users info
        DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users");
        //get all data from path
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                usersList.clear();
                for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()) {
                    ModelUsers modelUsers = dataSnapshot1.getValue(ModelUsers.class);
                    usersList.add(modelUsers);
                    // get all users except currently signed in user
                   if (!ModelUsers.getUid().equals(firebaseUser.getUid())) {
                        usersList.add(modelUsers);
                    }
                }
                adapterUser.notifyDataSetChanged();
            }

Но тогда я получаю Non static method 'getUid()' cannot be reference from a static context, когда добавляю:

if (!ModelUsers.getUid().equals(firebaseUser.getUid())) {
                            usersList.add(modelUsers);
                        }

Проблема в том, что если я сделаю это stati c, я получаю ошибку в данных списка. Есть ли способ решить эту проблему? проблема? Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Проблема здесь:

 if (!ModelUsers.getUid().equals(firebaseUser.getUid())) {
                    usersList.add(modelUsers);
 }

Вы вызываете getUid() метод, напрямую использующий класс, вызывайте его, используя объект класса. также проверьте, является ли Uid нулевым или нет:

if (modelUsers.getUid() != null && !modelUsers.getUid().equals(firebaseUser.getUid())) {
    usersList.add(modelUsers);
}

PS:

в вашем функциональном комментарии usersList.add(modelUsers);, а также проверьте todo. обновите свою функцию следующим образом:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    usersList.clear();

    //TODO CHECK HERE HOW MANY dataSnapshot OBJECTS ARE YOU GETTING

    for(DataSnapshot dataSnapshot1: dataSnapshot.getChildren()) {
        ModelUsers modelUsers = dataSnapshot1.getValue(ModelUsers.class);
        //usersList.add(modelUsers);
        // get all users except currently signed in user
        if (modelUsers.getUid() != null && !modelUsers.getUid().equals(firebaseUser.getUid())) {
            usersList.add(modelUsers);
        }
    }
      adapterUser.swapData(userList);
    //adapterUser.notifyDataSetChanged();
}

Добавьте этот метод в свой класс адаптера (обновите имя переменной и тип данных как свой):

public void swapData(ArrayList<ModelUsers> list) {
    if (list != null) {
        this.arrayList.clear();
        this.arrayList.addAll(list);
        notifyDataSetChanged();
    }
}
0 голосов
/ 04 апреля 2020

Похоже, вы намеревались использовать modelUsers.getUid() со строчной буквой m, чтобы ссылаться на объект, который вы только что создали в строках выше.

...