Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否可以获取用户从回收视图中选择的帖子的UID?_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 是否可以获取用户从回收视图中选择的帖子的UID?

Android 是否可以获取用户从回收视图中选择的帖子的UID?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我的应用程序允许用户将图像上传到Firebase,然后用上传的图像填充回收视图。我将图像存储在一个根引用下,该根引用由UID以及当前日期和时间组成。我想访问这些特定节点,但我不确定如何访问。其次,我想知道是否有可能获得UID以及用户从循环视图中选择的帖子的时间戳 Post g0lybPOGmWXkM13YEbX8pWbzF7x208-A-201900:44 desc: "me" uid: "g0lybPOGmWXkM13YEbX8pWbzF7x2" image: "image url"

我的应用程序允许用户将图像上传到Firebase,然后用上传的图像填充回收视图。我将图像存储在一个根引用下,该根引用由UID以及当前日期和时间组成。我想访问这些特定节点,但我不确定如何访问。其次,我想知道是否有可能获得UID以及用户从循环视图中选择的帖子的时间戳

Post
 g0lybPOGmWXkM13YEbX8pWbzF7x208-A-201900:44
 desc: "me"
 uid:  "g0lybPOGmWXkM13YEbX8pWbzF7x2"
 image: "image url"
 name:  "some name"
 profileimage: "Image"
 timestamp:  "contains time stamp
 timestamp: "08-A-201900:44"
此代码从Post节点检索信息并填充我的RecycleView

//Retrieves information stored inside Post node...
    public void fetchUserInfo() {
        Toast.makeText(this, "fetch info method called", Toast.LENGTH_SHORT).show();
        postRef = FirebaseDatabase.getInstance().getReference().child("Post");
        postRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    value = ds.getValue(Post.class);
                    postIdArray.add(value.getid());
                    postList.add(value);
                }

                adapter = new Adapter(Shop_Activity.this, postList);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.i("Error", databaseError.toString());

            }
        });
    }
适配器类

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder>{
    private Context context;
    private ArrayList<Post> userPost;




    public Adapter(Context context, ArrayList<Post> userPost){
        this.context = context;
        this.userPost = userPost;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        return new ViewHolder(LayoutInflater.from(context).inflate(R.layout.shop_layout_design,viewGroup, false));

    }

    //this is where you set the value for the ui elements or load up data for the views
    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        viewHolder.desc.setText(userPost.get(i).getdesc());
        //viewHolder.id.setText(userPost.get(i).getid());
        viewHolder.name.setText(userPost.get(i).getName());
        Glide.with(this.context).load(userPost.get(i).getimage()).into(viewHolder.image);
        Glide.with(this.context).load(userPost.get(i).getProfileimage()).into(viewHolder.profilePicture);

        int postKey = viewHolder.getAdapterPosition();


    }

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


    //links up ui elements
    class ViewHolder extends  RecyclerView.ViewHolder{
        private TextView desc;
        private TextView id;
        private ImageView messageImageView;
        private ImageView image;
        private CircleImageView profilePicture;
        private TextView name;

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

            id = itemView.findViewById(R.id.post_title);
            desc = itemView.findViewById(R.id.post_desc);
            image = itemView.findViewById(R.id.post_image);
            profilePicture = itemView.findViewById(R.id.profilePicture);
            name = itemView.findViewById(R.id.name);
            messageImageView = itemView.findViewById(R.id.messageImageView);

            messageImageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "Message button pressed", Toast.LENGTH_SHORT).show();
                }
            });



        }



    }
}
公共类适配器扩展了RecyclerView.Adapter{
私人语境;
私有arraylistuserpost;
公共适配器(上下文,ArrayList userPost){
this.context=上下文;
this.userPost=userPost;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
返回新的视图持有者(LayoutFlater.from(上下文)。充气(R.layout.shop_layout_design,viewGroup,false));
}
//这是为ui元素设置值或加载视图数据的地方
@凌驾
public void onBindViewHolder(@NonNull ViewHolder ViewHolder,int i){
viewHolder.desc.setText(userPost.get(i.getdesc());
//viewHolder.id.setText(userPost.get(i.getid());
viewHolder.name.setText(userPost.get(i.getName());
Glide.with(this.context).load(userPost.get(i.getimage())到(viewHolder.image)中;
Glide.with(this.context).load(userPost.get(i.getProfileimage())到(viewHolder.profilePicture)中;
int postKey=viewHolder.getAdapterPosition();
}
@凌驾
public int getItemCount(){
返回userPost.size();
}
//链接ui元素
类ViewHolder扩展了RecyclerView.ViewHolder{
私有文本视图描述;
私有文本视图id;
私有ImageView消息ImageView;
私有图像查看图像;
私有CircleImageView配置文件图片;
私有文本视图名称;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
id=itemView.findviewbyd(R.id.post_title);
desc=itemView.findviewbyd(R.id.post\u desc);
image=itemView.findviewbyd(R.id.post_image);
profilePicture=itemView.findViewById(R.id.profilePicture);
name=itemView.findviewbyd(R.id.name);
messageImageView=itemView.findViewById(R.id.messageImageView);
messageImageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“消息按钮按下”,Toast.LENGTH_SHORT.show();
}
});
}
}
}

假设您从该对象的列表中填充RecyclerView项,您可以在适配器中获得所选项的值,如下所示

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        holder.name.setText(files.get(position).getName());
        holder.itemRow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, files.get(position).getUid());
            }
        });
    }

这里,文件指的是对象的列表/ArrayList。

假设您从该对象的列表中填充RecyclerView项,您可以在适配器中获得所选项的值,如下所示

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        holder.name.setText(files.get(position).getName());
        holder.itemRow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, files.get(position).getUid());
            }
        });
    }

在这里,文件指的是对象的列表/数组列表。

它完全取决于Firebase上的结构。在问题中发布一些相关代码,以便我们更好地了解情况。发布您的RecyclerView适配器代码。FirebaseDatabase.getInstance().getReference().child(“uid”);这完全取决于Firebase上的结构。在问题中发布一些相关代码,以便我们更好地了解情况。发布您的RecyclerView适配器代码。FirebaseDatabase.getInstance().getReference().child(“uid”);虽然这种方法适用于点击recyclerview,但从长远来看,它可能会导致内存问题,这是因为每次绑定整行时,您都在创建一个新的
视图实例。OnClickListener
,要解决这个问题,最好使用一个注册点击的界面。@GastónSaillén同意。只是想给OP一个启示。虽然这种方法适用于点击recyclerview,但长期来看可能会导致内存问题,这是因为每次绑定整行时,您都在创建一个新的
视图实例。OnClickListener
,要解决此问题,“使用一个注册点击的界面将是一个最佳实践。”加斯托尼塞莱恩同意。只是想给OP一个启示。