Как отфильтровать класс Firebase, прежде чем поместить его в recyclerView - PullRequest
0 голосов
/ 23 февраля 2019

Я использую 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();

...

}

1 Ответ

0 голосов
/ 23 февраля 2019

После долгих исследований выясняется, что вы можете заказать запрос, например:

query = query.child("users").orderByChild("latest_post")

Это позволит работать с переработанным представлением, но при прокрутке до определенной точки произойдет сбой..

Вы не можете отфильтровать запрос, чтобы исключить элементы, которые не существуют.

Мне пришлось создать свой собственный адаптер утилизатора, использовать список моего класса записей, а затем отфильтровать этот список.после запроса к базе данных.

...