【问题标题】:Display all posts from multiple firebase directories into recyclerView将来自多个 firebase 目录的所有帖子显示到 recyclerView
【发布时间】:2017-12-28 04:23:47
【问题描述】:

我正在撰写关于课堂公告的论文,但我陷入了困境。

在我的数据库中,我决定将不同用户的帖子分为几个类别。

类别

显示帖子的类别

所以我只成功地显示了一个类别(班级公告)下的所有帖子。

课堂公告

private RecyclerView postList;

private DatabaseReference database;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    addPost = findViewById(R.id.btnAddPost);

    database = FirebaseDatabase.getInstance().getReference().child("St Isidore of Seville")
            .child("Posts").child("Classroom Announcements");

    postList = findViewById(R.id.postList);

    postList.setLayoutManager(new LinearLayoutManager(this));

}

 @Override
protected void onStart() {
    super.onStart();

    FirebaseRecyclerOptions<Post> options= new FirebaseRecyclerOptions.Builder<Post>()
            .setQuery(database, Post.class).build();

    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Post, PostViewHolder>(options) {
        @Override
        public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_row, parent, false);

            return new PostViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull PostViewHolder holder, int position, @NonNull Post model) {
            holder.setTitle(model.getTitle());
            holder.setMessage(model.getMessage());
            holder.setDateCreated(model.getDateCreated());
        }
    };

    postList.setAdapter(firebaseRecyclerAdapter);

    firebaseRecyclerAdapter.startListening();
}

问题是只有“课堂公告”下的公告是唯一可以显示的帖子。如何显示所有公告,例如“账单”、“家庭作业”、“其他”等...

我可以使用类似的东西

database = FirebaseDatabase.getInstance().getReference().child("St Isidore of Seville")
            .child("Posts");

或者尽快将数据库中的每个类别放入一个 FirebaseRecyclerAdapter 中,以便我可以使用它们的日期在顶部显示最新的帖子?

【问题讨论】:

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

您需要使用两次getChildren(),所以请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child("St Isidore of Seville").child("Posts");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            for(DataSnapshot child : ds.getChildren()) {
                Post model = child.getValue(Post.class);
                Log.d("TAG", model.getTitle() + " / " + model.getMessage() + " / " + model.getDateCreated());
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
postsRef.addListenerForSingleValueEvent(eventListener);

【讨论】:

  • 它工作了,但我不再使用 firebaseUI 因为我不知道它是如何工作的。另外,我只使用了一次 for 循环,而不是使用了两次。谢谢,对我很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
相关资源
最近更新 更多