Java 我想更新所有帖子中的用户配置文件图片,以及用户更新/更改其配置文件图片时他发布的内容
我正在更新用户配置文件图片,它在我想要的所有活动中都能完美工作。但问题是,它并没有更新用户已经发布的所有帖子中的用户配置文件图片。我想更新用户的个人资料图片也有 这是数据库参考Java 我想更新所有帖子中的用户配置文件图片,以及用户更新/更改其配置文件图片时他发布的内容,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在更新用户配置文件图片,它在我想要的所有活动中都能完美工作。但问题是,它并没有更新用户已经发布的所有帖子中的用户配置文件图片。我想更新用户的个人资料图片也有 这是数据库参考 postRef= FirebaseDatabase.getInstance().getReference().child("posts"); 这是我的回收器视图设置 FirebaseRecyclerOptions<Posts> options=new FirebaseRecyclerOptions.Buil
postRef= FirebaseDatabase.getInstance().getReference().child("posts");
这是我的回收器视图设置
FirebaseRecyclerOptions<Posts> options=new FirebaseRecyclerOptions.Builder<Posts>()
.setQuery(postRef,Posts.class)
.build();
FirebaseRecyclerAdapter<Posts,PostsViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<Posts, PostsViewHolder>(options)
{
@Override
protected void onBindViewHolder(@NonNull final PostsViewHolder holder, int position, @NonNull final Posts model) {
final String postKey=getRef(position).getKey();
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent clickPostIntent=new Intent(MainActivity.this, ClickPostActivity.class);
clickPostIntent.putExtra("postKey",postKey);
startActivity(clickPostIntent);
}
});
holder.username.setText(model.getFullname());
holder.date.setText(model.getDate());
holder.time.setText(model.getTime());
if (model.getPost_uri_link()!=null){
holder.post_link.setText(model.getPost_uri_link());
}
else {
holder.post_link.setVisibility(View.GONE);
}
if (model.getPost_file_name()!=null && model.getPost_file_uri()!=null) {
holder.file_attach_name.setText(model.getPost_file_name());
holder.file_attach_name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
downloadFile(MainActivity.this,model.getPost_file_name(),"gs://studentcornerproject-be4c6.appspot.com/post files",model.getPost_file_uri());
}
});
}
else{
holder.file_attach_name.setVisibility(View.GONE);
}
if (model.getDescription()!=null) {
holder.description.setText(model.getDescription());
}
else {
holder.description.setVisibility(View.GONE);
}
if (model.getPost_img()!=null) {
Picasso.get().load(model.post_img).networkPolicy(NetworkPolicy.OFFLINE).placeholder(android.R.drawable.progress_indeterminate_horizontal).into(holder.post_img, new Callback() {
@Override
public void onSuccess() {
postRef.child("post_img").keepSynced(true);
}
@Override
public void onError(Exception e) {
Picasso.get().load(model.post_img).into(holder.post_img);
}
});
}
else {
holder.post_img.setVisibility(View.GONE);
}
Picasso.get().load(model.getProfile_image()).networkPolicy(NetworkPolicy.OFFLINE).placeholder(R.drawable.profile_icon).into(holder.prof_img, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
Picasso.get().load(model.getProfile_image()).into(holder.prof_img);
}
});
}
@NonNull
@Override
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.all_posts_users,viewGroup,false);
PostsViewHolder viewHolder=new PostsViewHolder(view);
return viewHolder;
}
};
postslist.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
public static class PostsViewHolder extends RecyclerView.ViewHolder
{
TextView username,date,time,description,file_attach_name,post_link;
CircleImageView prof_img;
ImageView post_img;
public PostsViewHolder(@NonNull View itemView) {
super(itemView);
post_link=itemView.findViewById(R.id.post_link);
username=itemView.findViewById(R.id.post_user_name);
date=itemView.findViewById(R.id.post_date);
time=itemView.findViewById(R.id.post_time);
description=itemView.findViewById(R.id.post_description);
file_attach_name=itemView.findViewById(R.id.post_filename);
prof_img=itemView.findViewById(R.id.post_profile_img);
post_img=itemView.findViewById(R.id.post_image);
}
FirebaseRecyclerOptions选项=新建FirebaseRecyclerOptions.Builder()
.setQuery(postRef,Posts.class)
.build();
FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter(选项)
{
@凌驾
受保护的无效onBindViewHolder(@NonNull final PostsViewHolder holder,int position,@NonNull final Posts model){
最后一个字符串postKey=getRef(position).getKey();
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向ClickPostContent=新意向(MainActivity.this,ClickPostActivity.class);
单击PostContent.putExtra(“postKey”,postKey);
开始触觉(点击内容);
}
});
holder.username.setText(model.getFullname());
holder.date.setText(model.getDate());
holder.time.setText(model.getTime());
if(model.getPost\u uri\u link()!=null){
holder.post_link.setText(model.getPost_uri_link());
}
否则{
holder.post_link.setVisibility(View.GONE);
}
if(model.getPost\u file\u name()!=null&&model.getPost\u file\u uri()!=null){
holder.file_attach_name.setText(model.getPost_file_name());
holder.file\u attach\u name.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
下载文件(main activity.this,model.getPost_file_name(),“gs://studentcornerproject-be4c6.appspot.com/post files”,model.getPost_file_uri());
}
});
}
否则{
holder.file\u attach\u name.setVisibility(View.GONE);
}
if(model.getDescription()!=null){
holder.description.setText(model.getDescription());
}
否则{
支架.说明.设置可见性(视图.消失);
}
if(model.getPost_img()!=null){
Picasso.get().load(model.post\u img).networkPolicy(networkPolicy.OFFLINE).占位符(android.R.drawable.progress\u undeterminate\u horizontal).插入(holder.post\u img,new Callback()){
@凌驾
成功时的公共无效(){
postRef.child(“post_img”)。保持同步(真);
}
@凌驾
公共无效申报人(例外e){
Picasso.get().load(model.post\u img).into(holder.post\u img);
}
});
}
否则{
支架.后安装设置可见性(视图.消失);
}
Picasso.get().load(model.getProfile_image()).networkPolicy(networkPolicy.OFFLINE).占位符(R.drawable.profile_图标).into(holder.prof_img,new Callback()){
@凌驾
成功时的公共无效(){
}
@凌驾
公共无效申报人(例外e){
Picasso.get().load(model.getProfile_image()).into(holder.prof_img);
}
});
}
@非空
@凌驾
public PostsViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View View=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.all_posts_用户,viewGroup,false);
postsviewolder视图持有者=新的postsviewolder(视图);
返回视图持有者;
}
};
postslist.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
公共静态类PostsViewHolder扩展了RecyclerView.ViewHolder
{
TextView用户名、日期、时间、说明、文件名、附件名、帖子链接;
CircleImageView教授;
ImageView post_img;
public PostsViewHolder(@NonNull View itemView){
超级(项目视图);
post\u link=itemView.findviewbyd(R.id.post\u link);
username=itemView.findviewbyd(R.id.post\u用户名);
日期=itemView.findViewById(R.id.post_日期);
时间=itemView.findViewById(R.id.post_时间);
description=itemView.findviewbyd(R.id.post\u description);
file\u attach\u name=itemView.findviewbyd(R.id.post\u文件名);
prof\u img=itemView.findviewbyd(R.id.post\u profile\u img);
post\u img=itemView.findviewbyd(R.id.post\u image);
}
我想更新他已经发布的所有帖子中的个人资料图片。在你的用户ID节点中,你应该存储该用户帖子的ID,然后你可以更改用户发布的所有帖子的照片url 范例
Users
|______UserID
|_ userPosts
|_ postID
然后,当您更改用户的照片url时,您可以检索所有帖子并更改相同的照片url。我的问题已经解决。以下是正确的代码
Query postQuery=postRef.orderByChild("uid").equalTo(currentUserId);
postQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot:dataSnapshot.getChildren()){
Log.i("Post",snapshot.getKey());
postRef.child(snapshot.getKey()).child("profile_image").setValue(profile_img);
postRef.child(snapshot.getKey()).child("fullname").setValue(fullname);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我已经在他写的每个帖子中存储了用户id。我正在检索所有帖子。但问题是更新旧帖子中的图片。不,你正在用户id中存储用户的数据,但不是帖子的数据,你应该在用户id中存储帖子id。我已经附加了我的另一张帖子节点的图片。请检查它上面。已经存储了将post链接到发布的用户的uid