Я использую addChildEventListener на уровне users
моей базы данных firebase, которая содержит usernames
email
и latest_post
.RecyclelerView будет использовать только latest_post
, что необязательно, и не у всех пользователей будет его, поэтому мне нужно отфильтровать объект userPosts, чтобы он содержал только пользователей, имеющих поле `latest_post '.вот слушатель события:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
User userPost = dataSnapshot.getValue(User.class);
System.out.println("User" + userPost.getUsername());
}
Вот как я настраиваю ячейки recyclerView:
void setPost(final User user) {
final Post post = user.getLatest_post();
final Long date = post.post_date;
final String post_id = post.getPost_id();
final String key = post.getPost_id();
final Integer reads = post.getReads();
final String titleString = post.getTitle();
final String bodyString = post.getBody();
final String usernameString = post.getAuthor();
final String category = post.getCategory();
final String author_id = post.getAuthor_id();
...
}
Так что, если я не отфильтрую userPosts до того, как я настрою представление, произойдет сбой, потому что он попытаетсядаже на тропинках, где нет latest_post
.Как я могу отфильтровать, чтобы объект, который я использую при настройке представления переработчика, содержал только те объекты, у которых latest_post
не равно нулю?Я не могу изменить структуру базы данных, как этот момент.Спасибо.
ОБНОВЛЕНИЕ:
Делая это, я вижу, что он знает, какие значения имеют last_post, а какие нет, но я все еще не уверен, как превратить его в хороший объект.могу сделать мои настройки с.Я обновил код следующим образом:
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
Post latestPost = dataSnapshot.child("latest_post").getValue(Post.class);
Boolean userPost = dataSnapshot.hasChild("latest_post");
System.out.println("User" + userPost);
System.out.println("latestPost" + latestPost);
}
Так что каким-то образом я могу просто использовать класс Post, содержащийся в User:
void setPost(final Post post) {
final Post latest = post;
final Long date = latest.post_date;
final String post_id = latest.getPost_id();
final String key = latest.getPost_id();
final Integer reads = latest.getReads();
final String titleString = latest.getTitle();
final String bodyString = latest.getBody();
final String usernameString = latest.getAuthor();
final String category = latest.getCategory();
final String author_id = latest.getAuthor_id();
...
}