firebase recyclerview中每个帖子上的Firebase数据库更新配置文件图片

问题描述 投票:0回答:1

我有一个使用FirebaseRecyclerAdapter构建的,来自不同用户的帖子的供稿。

效果很好,但是当我更改用户的个人资料图片时,我也希望更改该用户所有帖子中的个人资料图片。

目前,它仅显示创建帖子时显示的个人资料照片。

这里是代码:

当我单击上载按钮时,我称为selectImage:

private void chooseImage() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
    }


@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null && data.getData() != null) {
            imageUri = data.getData();
            uploadImage();
        }
    }

private void uploadImage() {
        if (imageUri != null) {

            StorageReference fileReference = storageReference
                    .child(FirebaseAuth.getInstance().getCurrentUser().getUid() + "." + getImageExtension(imageUri));
            fileReference.putFile(imageUri)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            Handler handler = new Handler();
                            Picasso.with(getContext()).load(imageUri).into(imgProfile);
                            handler.postDelayed(new Runnable() {
                                @Override
                                public void run() {
                                    progressBar.setProgress(0);
                                    progressBar.setVisibility(View.GONE);

                                }
                            }, 1000);
                            Toast.makeText(getActivity(), "Image changed successfully", Toast.LENGTH_LONG).show();
                            databaseReference.child("profilePic").setValue(taskSnapshot.getStorage().getDownloadUrl().toString());
                            UserProfileChangeRequest profileChangeRequest = new UserProfileChangeRequest.Builder()
                                    .setPhotoUri(imageUri)
                                    .build();
                            user.updateProfile(profileChangeRequest);

                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();

                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                            progressBar.setVisibility(View.VISIBLE);
                            progressBar.setProgress((int) progress);
                        }
                    });
        } else {
            Toast.makeText(this.getContext(), "No image selected", Toast.LENGTH_SHORT).show();
        }


    }

这是我添加帖子的方式:

btnPostComm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String story = et.getText().toString();
                String title = et2.getText().toString();
                String key = refference.push().getKey();
                String name = user.getDisplayName();
                String uri = user.getPhotoUrl().toString();
                CommModel model = new CommModel(
                        story,
                        title,
                        name,
                        uri
                );

                refference
                        .child(key)
                        .setValue(model);
            }
        });

这是我的Model类:

public class CommModel {
    private String story;
    private String title;
    private String name;
    private String uri;

    public CommModel(){}

    public CommModel(String story, String title, String name, String uri) {
        this.story = story;
        this.title = title;
        this.name = name;
        this.uri = uri;
    }

    public String getStory() {
        return story;
    }

    public void setStory(String story) {
        this.story = story;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getName() {
        return name;
    }

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

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }
}

这是ViewHolder:

public class PostsViewHolder extends RecyclerView.ViewHolder {

    public TextView txtStory;
    public TextView txtTitle;
    public TextView txtName;
    public CircularImageView proImage;

    public QNAViewHolder(@NonNull View itemView) {
        super(itemView);
        txtStory = itemView.findViewById(R.id.txtStory);
        txtTitle = itemView.findViewById(R.id.txtTitle);
        txtName = itemView.findViewById(R.id.txtName1);
        proImage = itemView.findViewById(R.id.profile3);
    }
}

这是承载RecyclerView的Fragment中的适配器:

public void showPosts() {
        FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<CommModel>()
                .setQuery(ref, CommModel.class)
                .build();
        adpt = new FirebaseRecyclerAdapter<CommModel, PostsViewHolder>(options) {

            @Override
            protected void onBindViewHolder(@NonNull PostsViewHolder holder, int position, @NonNull CommModel model) {
                holder.txtStory.setText(model.getStory());
                holder.txtTitle.setText(model.getTitle());
                holder.txtName.setText(model.getName());
                Glide.with(Posts.this).load(model.getUri()).into(holder.proImage);

            }

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

            @Override
            public void onDataChanged() {
                recyclerView.removeAllViews();
                super.onDataChanged();
            }

            @NonNull
            @Override
            public CommModel getItem(int position) {
                return super.getItem(getItemCount() - 1 - position);
            }

            @NonNull
            @Override
            public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.qna_feed, parent, false);
                return new PostsViewHolder(view);
            }
        };
        adpt.startListening();
        adpt.notifyDataSetChanged();
        recyclerView.setAdapter(adpt);
    }

当用户更改个人资料图片时,如何更新用户每条帖子上的图片?

非常感谢!

android firebase firebase-realtime-database firebase-storage recycler-adapter
1个回答
0
投票

如果要执行此操作,则必须更改CommModel类。您需要添加另一个属性,例如userUid

© www.soinside.com 2019 - 2024. All rights reserved.