Android 在recyclerview适配器中获取用户uid

Android 在recyclerview适配器中获取用户uid,android,firebase,android-recyclerview,Android,Firebase,Android Recyclerview,我正在尝试从recycler视图中的用户列表中筛选我的用户。但是我需要为onBindViewHolder中的每个用户获取uid,我不知道如何获取。我还想将onBindViewHolder中的代码移动到ViewHolder的bind方法,但我不知道如何获取上下文 private void setRecyclerView(){ mUsersRecyclerView.setHasFixedSize(真); mUsersRecyclerView.setLayoutManager(新的LinearLay

我正在尝试从recycler视图中的用户列表中筛选我的用户。但是我需要为onBindViewHolder中的每个用户获取uid,我不知道如何获取。我还想将onBindViewHolder中的代码移动到ViewHolder的bind方法,但我不知道如何获取上下文

private void setRecyclerView(){
mUsersRecyclerView.setHasFixedSize(真);
mUsersRecyclerView.setLayoutManager(新的LinearLayoutManager(本));
mAdapter=newuseradapter();
mUsersRecyclerView.setAdapter(mAdapter);
mDatabase.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
Iterable list=dataSnapshot.getChildren();
//筛选当前用户
//List userList=new ArrayList();
用于(DataSnapshot用户:列表){
如果(!user.getKey().equals(mCurrentUid)){
添加(user.getValue(user.class));
}
}
//设置数据
//mAdapter.setItems(用户列表);
}
@重写已取消的公共void(@NonNull DatabaseError DatabaseError){}
});
}
私有类UserAdapter扩展了RecyclerView.Adapter{
@非空
@凌驾
public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
返回新的UserViewHolder(LayoutInflater.from(parent.getContext())
.充气(R.layout.user_item_layout,parent,false));
}
@凌驾
public void onBindViewHolder(@NonNull UserViewHolder,int位置){
User=mUserList.get(位置);
持有者绑定(用户);
//TODO:将其移动到holder.bind()方法
holder.setThumb_image(user.getThumb_image(),getApplicationContext());
holder.mView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Intent intent9=新的Intent(UsersActivity.this,ProfileActivity.class);
intent9.putExtra(“user_id”,uid);//TODO:在此处为每个用户获取uid
起始触觉(意向9);
}
});
}
@凌驾
public int getItemCount(){
返回mUserList.size();
}
}
私有类UserViewHolder扩展了RecyclerView.ViewHolder{
视图视图;
公共用户视图持有者(视图项视图){
超级(项目视图);
mView=项目视图;
}
公共无效绑定(用户){
TextView-nameView=mView.findviewbyd(R.id.item\u-name);
nameView.setText(user.getName());
TextView statusView=mView.findviewbyd(R.id.item_status);
statusView.setText(user.getStatus());
}
公共无效setThumb_图像(字符串thumb_图像,上下文ctx){
CircleImageView imageView=mView.findViewById(R.id.item_图像);
毕加索.with(ctx).load(拇指图像).placeholder(R.mipmap.icon).into(图像视图);
}
}

使用不过滤用户的FirebaseRecyclerAdapter。

在模型中添加firbaseId,同时将数据存储到firebase数据库

下面是将用户信息存储到firebase的示例用户模型类

public class User {
private String name;
private String address;
private String firebaseId;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getFirebaseId() {
    return firebaseId;
}

public void setFirebaseId(String firebaseId) {
    this.firebaseId = firebaseId;
}
}

然后像下面这样存储值

FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = firebaseDatabase.getReference(DATABASE_NAME);
    String fireBaseId = databaseReference.push().getKey();
    if (fireBaseId != null) {
        User user = new User();
        user.setName("SSB");
        user.setAddress("Some address");
        user.setFirebaseId(fireBaseId);
        databaseReference.child(fireBaseId).setValue(user);
    }

然后,当您将数据存储到firebase数据库时,您可以从用户模型类获取id,并在模型中添加firbaseId

下面是将用户信息存储到firebase的示例用户模型类

public class User {
private String name;
private String address;
private String firebaseId;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getFirebaseId() {
    return firebaseId;
}

public void setFirebaseId(String firebaseId) {
    this.firebaseId = firebaseId;
}
}

然后像下面这样存储值

FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = firebaseDatabase.getReference(DATABASE_NAME);
    String fireBaseId = databaseReference.push().getKey();
    if (fireBaseId != null) {
        User user = new User();
        user.setName("SSB");
        user.setAddress("Some address");
        user.setFirebaseId(fireBaseId);
        databaseReference.child(fireBaseId).setValue(user);
    }

然后,您可以从用户模型类获取id

您正在尝试根据什么条件从用户列表中筛选您的用户?如果列表中用户的uid与当前登录用户的uid相同,则该用户不会添加到列表中。因此,您正在尝试在
onBindViewHolder
方法中创建列表?为什么?该方法用于绑定视图而不是创建列表。在
onBindViewHolder
中,我只想将视图绑定到列表的每个项目,但是我需要uid来打开用户的配置文件。您正在尝试根据什么条件从用户列表中筛选用户?如果列表中用户的uid与当前登录用户的uid相同,则不会将该用户添加到列表中。因此,您正在尝试在
onBindViewHolder
方法中创建列表?为什么?该方法用于绑定视图而不是创建列表。在
onBindViewHolder
中,我只想将视图绑定到列表的每个项目,但我需要uid来打开用户的配置文件。这非常有效,尽管它不适用于当前登录的用户,也许有办法将uid与列表一起传递?地图之类的。您可以使用共享首选项在会话中存储当前登录的用户id。请参阅此,然后使用该id。此项功能非常好,尽管它不适用于当前登录的用户,但是否有方法将uid与列表一起传递?地图或其他东西。您可以使用共享首选项在会话中存储当前登录的用户id。请参阅此,然后使用该id