将来自多个 firebase 目录的所有帖子显示到 recyclerView
Display all posts from multiple firebase directories into recyclerView
我正在研究关于课堂公告的论文,但我陷入了其中。
在我的数据库中,我决定将 post 个不同的用户归入几个类别。
Categories
Categories displaying posts
所以我已经成功地显示了一个类别(Class 公告)下的所有 post。
Classroom Announcements
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();
}
问题是只有 "Classroom Announcements" 下的公告是唯一可以显示的 post。如何显示所有公告,例如 "Bills"、"Homeworks"、"Others" 等...
我可以使用类似
的东西吗
database = FirebaseDatabase.getInstance().getReference().child("St Isidore of Seville")
.child("Posts");
或者尽快将数据库中的每个类别都放入一个 FirebaseRecyclerAdapter 中,以便我可以使用它们的日期在顶部显示最近的 post?
您需要使用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);
我正在研究关于课堂公告的论文,但我陷入了其中。
在我的数据库中,我决定将 post 个不同的用户归入几个类别。
Categories
Categories displaying posts
所以我已经成功地显示了一个类别(Class 公告)下的所有 post。
Classroom Announcements
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();
}
问题是只有 "Classroom Announcements" 下的公告是唯一可以显示的 post。如何显示所有公告,例如 "Bills"、"Homeworks"、"Others" 等...
我可以使用类似
的东西吗database = FirebaseDatabase.getInstance().getReference().child("St Isidore of Seville")
.child("Posts");
或者尽快将数据库中的每个类别都放入一个 FirebaseRecyclerAdapter 中,以便我可以使用它们的日期在顶部显示最近的 post?
您需要使用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);