简体   繁体   English

如何使用 FirebaseUI 库(Java Android)在 recyclerview 中显示特定用户的帖子

[英]How to show Posts by Specific users in a recyclerview using FirebaseUI library (Java Android)

I am using FirebaseUI library for my social app.我正在为我的社交应用程序使用 FirebaseUI 库。 I was able to retrieve posts by all users into a recyclerview.我能够将所有用户的帖子检索到回收站视图中。 My goal is to have another option where users can view and edit their own posts.我的目标是提供另一个选项,用户可以在其中查看和编辑自己的帖子。 I cant seem to get user specific posts from the database, how do I go about doing this?我似乎无法从数据库中获取用户特定的帖子,我该怎么做 go? Also I'm using a recyclerview within a Fragment我也在 Fragment 中使用 recyclerview

Database Structure数据库结构

数据库结构在这里

PostAdapter邮政适配器

public class PostsAdapter extends FirebaseRecyclerAdapter<Posts, PostsAdapter.postsViewholder> {
public PostsAdapter(@NonNull FirebaseRecyclerOptions<Posts> options) {
    super(options);
}

@Override
protected void onBindViewHolder(@NonNull PostsAdapter.postsViewholder holder, int position, @NonNull Posts model) {
    holder.name.setText(model.getName());
    holder.location.setText(model.getLocation());
    holder.occurence.setText(model.getOccurence());

    final String userUid = model.getUid();
    FirebaseDatabase.getInstance().getReference("Users").child(userUid).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                final String pictureUrl = snapshot.child("url").getValue(String.class);
                if (pictureUrl.isEmpty()) {
                    holder.img.setImageResource(R.drawable.ic_launcher_background);
                } else {
                    Picasso.get().load(pictureUrl).into(holder.img);
                }

            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
    //String bro = "Admin";
    if (holder.name.getText().toString() == "Admin") {
        holder.verify.setVisibility(View.VISIBLE);
    }
    // holder.verify.setImageResource(R.drawable.star);
    FirebaseDatabase rootNode = FirebaseDatabase.getInstance();
    String keybro1 = getRef(position).getKey();
    DatabaseReference reference = rootNode.getReference("UserPosts");
    // email.setText(mAuth.getCurrentUser().getEmail());
    holder.reply.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), replyActivity.class);
            String locationsn = (String) holder.location.getText();
            String occurencesn = (String) holder.occurence.getText();
            intent.putExtra("locationsn", locationsn);
            intent.putExtra("occurencesn", occurencesn);
            intent.putExtra("keybro", keybro1);
            v.getContext().startActivity(intent);
        }
    });
    holder.date.setText(model.getDate());
    //Picasso.get().load(model.getUrl()).into(holder.img);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

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

public class postsViewholder extends RecyclerView.ViewHolder {
    TextView location, occurence, name, date, reply, key, share, report;
    ImageView img, verify, imgshare;

    public postsViewholder(@NonNull View itemView) {
        super(itemView);
        location = itemView.findViewById(R.id.incident_get);
        occurence = itemView.findViewById(R.id.occurence_get);
        name = itemView.findViewById(R.id.name_get_one);
        reply = itemView.findViewById(R.id.reply);
        share = itemView.findViewById(R.id.share_me);
        report = itemView.findViewById(R.id.report_me);
        imgshare = itemView.findViewById(R.id.imgshare);
        verify = itemView.findViewById(R.id.verify);
        img = itemView.findViewById(R.id.mainimg);
        date = itemView.findViewById(R.id.date_time);
    }
}

How I retrieve all posts我如何检索所有帖子

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_posts, container, false);
    RecyclerView recyclerView = view.findViewById(R.id.postsrecycler);
    rootNode = FirebaseDatabase.getInstance();
    mAuth = FirebaseAuth.getInstance();
    change = view.findViewById(R.id.change);
    FloatingActionButton floatingActionButton = view.findViewById(R.id.main_post);
    mbase = FirebaseDatabase.getInstance().getReference("UserPosts");
    // To display the Recycler view linearly
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    // It is a class provide by the FirebaseUI to make a
    // query in the database to fetch appropriate data
    FirebaseRecyclerOptions<Posts> options = new FirebaseRecyclerOptions.Builder<Posts>().setQuery(mbase, Posts.class).build();
    // Connecting object of required Adapter class to
    // the Adapter class itself
    adapter = new PostsAdapter(options);
    // Connecting Adapter class with the Recycler view*/
    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(getActivity(), postActivity.class));
        }
    });
    return view;
}

@Override
public void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    adapter.stopListening();
}}

Expected Outcome screenshot预期结果截图

Home where users see all posts用户查看所有帖子的主页

Where users view their own posts用户查看自己帖子的位置

The relevant code is:相关代码是:

mbase = FirebaseDatabase.getInstance().getReference("UserPosts");
// To display the Recycler view linearly
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
// It is a class provide by the FirebaseUI to make a
// query in the database to fetch appropriate data
FirebaseRecyclerOptions<Posts> options = 
    new FirebaseRecyclerOptions.Builder<Posts>()
                               .setQuery(mbase, Posts.class).build();
// Connecting object of required Adapter class to
// the Adapter class itself
adapter = new PostsAdapter(options);

Since you're always passing base to the adapter, it will always show all child nodes of UserPosts .由于您始终将base传递给适配器,因此它将始终显示UserPosts的所有子节点。 To only show the child nodes for a specific user, you can use a query :要仅显示特定用户的子节点,您可以使用查询

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query query = mbase.orderByChild("uid").equalTo(uid);
FirebaseRecyclerOptions<Posts> options = 
    new FirebaseRecyclerOptions.Builder<Posts>()
                               .setQuery(query, Posts.class).build();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用 FirebaseUI FirestoreRecyclerAdapter 像聊天应用程序一样反转 recyclerView 布局? - How to reverse recyclerView layout like a chat app with FirebaseUI FirestoreRecyclerAdapter? 如何在特定用户的回收视图(FirebaseRecyclerOptions)中显示所有子项 - how to show all children in a recyclerview (FirebaseRecyclerOptions) for a specific user Android FirebaseUI 使用 Google 登录时释放密钥错误 - Android FirebaseUI sign in with Google error for release key 我在 android studio(java) 中添加“实现 'com.firebaseui:firebase-ui-database:8.0.1”时遇到问题 - I am facing problem for adding "implementation 'com.firebaseui:firebase-ui-database:8.0.1" in android studio(java) Twitter 在 Android 上使用 FirebaseUI 登录 - Twitter sign-in with FirebaseUI on Android 使用 FirebaseUI 时处理 FirebaseAuthUserCollisionException - Handling FirebaseAuthUserCollisionException when using FirebaseUI 当引用更改并变为空白时,FirebaseUI RecyclerView 不会更新 - FirebaseUI RecyclerView does not update when reference is changed and goes blank 如何使用 Android 在 RecyclerView 中显示来自 Firestore 的数据? - How to display data from Firestore in a RecyclerView with Android? 如何使用 JAVA 库在 Google API 上获取用户配置文件? - How to get user profile on Google API using the JAVA library? 我应该在哪里捕获 FirestorePagingAdapter 抛出的 InterruptedException - FirebaseUI-Android - Where should I catch the InterruptedException thrown by FirestorePagingAdapter - FirebaseUI-Android
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM