Получение Uid из базы данных Firebase

В настоящее время я работаю над приложением для чата. Моя цель - получить конкретный идентификатор (отмеченный на картинке) при нажатии на это имя пользователя и отобразить его в logcat.

На этих изображениях показаны значения, которые необходимо получить. Получение Uid из базы данных Firebase

Вот класс ViewHolder и класс адаптера для ресайклера View.

public class UsersAdapterClass extends RecyclerView.Adapter<UsersAdapterClass.UsersViewHolder>{
    Context context;
    List<Users> usersList;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference db;
    public UsersAdapterClass(Context context, List<Users> usersList) {
        this.context = context;
        this.usersList = usersList;
    }

    @Override
    public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.users_single_layout,parent,false);
        UsersViewHolder usersViewHolder = new UsersViewHolder(view);
        return usersViewHolder;
    }

    @Override
    public void onBindViewHolder(UsersViewHolder holder, int position) {
        Users users =  usersList.get(position);
        holder.name.setText(users.getName());
        holder.status.setText(users.getStatus());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                firebaseDatabase= FirebaseDatabase.getInstance();
                db = firebaseDatabase.getInstance().getReference("Users");
                final String firebaseId2 = db.push().getKey();
                Log.d("User ID",firebaseId2);
            }
        });

    }

    @Override
    public int getItemCount() {
        return usersList.size();
    }

    public class UsersViewHolder extends RecyclerView.ViewHolder{

        CircleImageView image;
        TextView name,status;

        public UsersViewHolder(View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.circleImageView);
            name = itemView.findViewById(R.id.users_displayname);
            status = itemView.findViewById(R.id.users_status);
        }

        public CircleImageView getImage() {
            return image;
        }
    }
}

Также это код для класса, который содержит вид ресайклера.

public class UsersMainActivity extends AppCompatActivity {

    private Toolbar mToolbar;
    RecyclerView mRecyclerView;
    UsersAdapterClass adapter;
    private DatabaseReference mUserDatabase;
    List<Users> usersList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_users_main);
        mToolbar = findViewById(R.id.allusers_appbar);
        mRecyclerView = findViewById(R.id.allusers_recyclerView);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("All users");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

        usersList = new ArrayList<>();

        DatabaseReference dbUsers = FirebaseDatabase.getInstance().getReference("Users");
        dbUsers.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists())
                {
                    for(DataSnapshot userSnapshot:dataSnapshot.getChildren())
                    {
                        Users u = userSnapshot.getValue(Users.class);
                        usersList.add(u);
                    }
                    adapter = new UsersAdapterClass(UsersMainActivity.this,usersList);
                    mRecyclerView.setAdapter(adapter);

                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });    
    }
}

Какую ошибку вы получали?

devmike01 10.12.2018 17:04

Все пользователи отображаются в представлении ресайклера, я хочу получить идентификатор пользователя, на которого я нажимаю. например: я нажимаю на пользователя 6. Я хочу получить его соответствующий uid.

Knightbarron 10.12.2018 17:48
0
2
324
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В зависимости от структуры вашей базы данных идентификаторы пользователей станут ключевыми при просмотре полученного снимка. Чтобы получить ключи, просто вызовите getKey() на вашем зацикленном снимке данных. Вы можете сделать это, добавив приведенный ниже код между вашим циклом и записав его в свой Logcat ...

String userIds = userSnapshot.getKey(); //Get keys
Log.d("USERID KEYS", userIds) //Log to logcat

Обновлено: Создайте добытчик и сеттер для идентификатора пользователя в вашей модели / POJO User. Затем передайте userIds сеттеру. Например u.setUserId(userIds). Теперь в вашем адаптере просто вставьте userid в свой onclick().

...
     @Override
     public void onClick(View v) {

         Log.d("User ID",user.getUserId());
    }
...

Спасибо за ответ. Поскольку все пользователи отображаются в представлении ресайклера, я хочу получить идентификатор пользователя, на которого я нажимаю. например: я нажимаю на пользователя 6. Я хочу получить его соответствующий uid. Заранее спасибо.

Knightbarron 10.12.2018 17:48

Я немного изменил свой ответ. Дай мне знать, если тебе все еще понадобится помощь.

devmike01 10.12.2018 18:09

Спасибо друг. Это было именно то, что я искал.

Knightbarron 10.12.2018 18:56

Пожалуйста. Проголосуйте и примите это как правильный ответ, если он решил вашу проблему. Ваше здоровье!

devmike01 10.12.2018 19:10

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

Knightbarron 11.12.2018 04:27

Вы должны сначала принять это как правильный ответ, а затем создать еще одну публикацию о новой проблеме.

devmike01 11.12.2018 11:13

Внутри вашего onBindViewHolder вы можете хранить идентификаторы в строке таким образом

последняя строка userIds = getRef (позиция) .getKey ();

Другие вопросы по теме