Android 如何显示多个用户';在RecyclerView上使用Firebase存储的图像

Android 如何显示多个用户';在RecyclerView上使用Firebase存储的图像,android,firebase,android-recyclerview,firebase-storage,Android,Firebase,Android Recyclerview,Firebase Storage,大家好,我正在努力掌握如何从Firebase存储中检索数据并将其显示到我的RecyclerView上的想法。按照我的应用程序的设置方式,每个用户都可以设置自己的用户配置文件图片。因此,我存储图片以满足每个用户的需要的方法是根据文件的UID命名文件。见下文: 这是我的Firestore 现在,我很难知道如何在我的RecyclerView上显示它。目前,myRecyclerView可以显示用户的全名、电子邮件和分数,如下所示: 以下是我目前正在使用的代码: 用户模型 public class

大家好,我正在努力掌握如何从Firebase存储中检索数据并将其显示到我的
RecyclerView
上的想法。按照我的应用程序的设置方式,每个用户都可以设置自己的用户配置文件图片。因此,我存储图片以满足每个用户的需要的方法是根据文件的
UID
命名文件。见下文:

这是我的Firestore

现在,我很难知道如何在我的
RecyclerView
上显示它。目前,my
RecyclerView
可以显示用户的
全名
电子邮件
分数
,如下所示:

以下是我目前正在使用的代码:

用户模型

public class UserModel {

private String FullName;
private String Email;
private long Score;


public UserModel() {
}

public UserModel(String fullName, String email, long score) {
    this.FullName = fullName;
    this.Email = email;
    this.Score = score;
}

public String getFullName() {
    return FullName;
}

public void setFullName(String fullName) {
    FullName = fullName;
}

public String getEmail() {
    return Email;
}

public void setEmail(String email) {
    Email = email;
}

public long getScore() {
    return Score;
}

public void setScore(long score) {
    Score = score;
}
用户适配器

public class UserAdapter extends FirestoreRecyclerAdapter<UserModel, 
UserAdapter.UserViewHolder> {

public UserAdapter(@NonNull FirestoreRecyclerOptions<UserModel> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull UserAdapter.UserViewHolder holder, int position, @NonNull UserModel model) {
    holder.username.setText(model.getFullName());
    holder.email.setText(model.getEmail());
    holder.score.setText(model.getScore()+"");


}

@NonNull
@Override
public UserAdapter.UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_leaderboard_single, parent, false);
    return new UserViewHolder(view);
}

public class UserViewHolder extends RecyclerView.ViewHolder {

    CircleImageView userImage;
    TextView username;
    TextView email;
    TextView score;

    public UserViewHolder(@NonNull View itemView) {
        super(itemView);

        userImage = itemView.findViewById(R.id.list_image);
        username = itemView.findViewById(R.id.list_username);
        email = itemView.findViewById(R.id.list_email);
        score = itemView.findViewById(R.id.list_score);
    }
}
公共类UserAdapter扩展FirestoreRecyclerAdapter{
公共用户适配器(@NonNull FirestoreRecyclerOptions选项){
超级(期权);
}
@凌驾
受保护的无效onBindViewHolder(@NonNull UserAdapter.UserViewHolder holder,int位置,@NonNull UserModel model){
holder.username.setText(model.getFullName());
holder.email.setText(model.getEmail());
holder.score.setText(model.getScore()+);
}
@非空
@凌驾
public UserAdapter.UserViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.list\u leadboard\u single,parent,false);
返回新的UserViewHolder(视图);
}
公共类UserViewHolder扩展了RecyclerView.ViewHolder{
CircleImageView用户图像;
文本视图用户名;
TextView电子邮件;
文本视图分数;
public UserViewHolder(@NonNull View itemView){
超级(项目视图);
userImage=itemView.findviewbyd(R.id.list\u image);
username=itemView.findviewbyd(R.id.list\u用户名);
email=itemView.findviewbyd(R.id.list\u email);
分数=itemView.findViewById(R.id.list\U分数);
}
}
主要活动

public class Leaderboard extends Fragment{

private RecyclerView leaderboard_recycler;
private FirestoreRecyclerAdapter adapter;
private StorageReference storageReference;
FirebaseFirestore fStore;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_leaderboard, container, false);

    leaderboard_recycler = view.findViewById(R.id.leaderboard_list);
    setUpRecyclerView();

    return view;
}

@Override
public void onStop() {
    super.onStop();
    if(adapter != null)
    adapter.stopListening();
}

@Override
public void onStart() {
    super.onStart();
    if(adapter != null)
    adapter.startListening();
}


private void setUpRecyclerView() {
    fStore = FirebaseFirestore.getInstance();

    //Query
    Query query = fStore.collection("users")
            .orderBy("Score", Query.Direction.DESCENDING);

    //RecyclerOptions
    FirestoreRecyclerOptions<UserModel> options = new FirestoreRecyclerOptions.Builder<UserModel>()
            .setQuery(query, UserModel.class)
            .build();

    adapter = new UserAdapter(options);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
    leaderboard_recycler.setLayoutManager(linearLayoutManager);
    leaderboard_recycler.setAdapter(adapter);
    leaderboard_recycler.invalidate();
}
}
公共类排行榜扩展片段{
私人回收商查看排行榜\ U回收商;
私人FirestoreRecyclerAdapter适配器;
私有存储参考存储参考;
FirebaseFirestore商店;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_排行榜,容器,假);
排行榜回收器=view.findViewById(R.id.leadboard\u列表);
setUpRecyclerView();
返回视图;
}
@凌驾
公共void onStop(){
super.onStop();
if(适配器!=null)
adapter.stopListening();
}
@凌驾
public void onStart(){
super.onStart();
if(适配器!=null)
adapter.startListening();
}
私有void setUpRecyclerView(){
fStore=FirebaseFirestore.getInstance();
//质疑
Query Query=fStore.collection(“用户”)
.orderBy(“分数”、查询、方向、降序);
//回收选项
FirestoreRecyclerOptions选项=新建FirestoreRecyclerOptions.Builder()
.setQuery(查询,UserModel.class)
.build();
适配器=新用户适配器(选项);
LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false);
排行榜回收商。setLayoutManager(linearLayoutManager);
排行榜回收器。设置适配器(适配器);
排行榜_回收商。无效();
}
}
如果有人能为我指明正确的方向来处理这种情况,我将永远感激。谢谢

  • 您的用户模型类应该包含一个名为“profilePictureUrl”的属性,该属性是用于存储图像url的
    字符串
    类型变量

  • 您应该为用户制作一个屏幕(
    Activity
    Fragment
    ),以便将其图片上载到Firebase存储,并且Firebase存储将返回该文件url,只需将其保存/更新到您的用户对象即可

  • 要显示图像,请使用modern image loading libraryGlide


    • Firebase存储教程:
    • 滑翔教程:
    • 我的聊天应用演示:

    嘿,山姆,我已经制作了一个
    片段
    ,专门供用户上传他们自己的个人资料图片。然后,它将存储在Firebase存储中,在他们自己的
    UID
    下。但是我不知道如何让Firebase存储返回文件url并存储在“profilePictureUrl”中对象。我在上面给出的第一个教程视频中已经回答了你的问题,特别是在这个时候:。一旦你得到url,只需更新它或将它设置为你的firebase用户对象。我还有一个实验演示:我的错,Sam。打开的上千个选项卡正在慢慢影响我的心理。谢谢你的引导!我很感激!@Scrin哦,问题。嘿,我成功了!非常感谢你,朋友。