Как разобрать только указанные c данные с parseSnapshot? - PullRequest
1 голос
/ 02 мая 2020

Проще говоря, у меня есть таблица с именем Wishlist в базе данных Firebase, которая содержит 2 различных типа объектов: достопримечательности и достопримечательности.

Firebase Wishlist table

Затем в моем приложении я хочу показать во фрагменте только те объекты из таблицы Wishlist, которые являются достопримечательностями. Как я мог этого добиться? Прямо сейчас, код выглядит следующим образом: (очевидно, он взломает sh, если я поставлю return null, но как еще я могу решить эту проблему?)

package com.example.mytravelapp.Fragments;


import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.mytravelapp.Adapters.WishlistViewHolder;
import com.example.mytravelapp.Models.Sight;
import com.example.mytravelapp.Models.Wishlist;
import com.example.mytravelapp.R;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.firebase.ui.database.SnapshotParser;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;
import java.util.List;

/**
 * A simple {@link Fragment} subclass.
 */
public class WishlistSightsFragment extends Fragment {
    private RecyclerView wishlist;
    private DatabaseReference query;
    private FirebaseRecyclerAdapter adapter;
    private FirebaseUser user;

    public WishlistSightsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_wishlist_sights, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        wishlist = view.findViewById(R.id.rvWishlistSights);
        wishlist.setHasFixedSize(true);
        user = FirebaseAuth.getInstance().getCurrentUser();

        GridLayoutManager grid = new GridLayoutManager(getContext().getApplicationContext(), 1);
        wishlist.setLayoutManager(grid);

        fetch();
    }

    private void fetch(){
        query = FirebaseDatabase.getInstance().getReference("wishlist").child(user.getUid());

        FirebaseRecyclerOptions<Wishlist> options =
                new FirebaseRecyclerOptions.Builder<Wishlist>()
                        .setQuery(query, new SnapshotParser<Wishlist>() {
                            @NonNull
                            @Override
                            public Wishlist parseSnapshot(@NonNull DataSnapshot snapshot) {
                                Wishlist attraction = new Wishlist(snapshot.child("idWishlist").getValue().toString(),
                                        snapshot.child("idAttraction").getValue().toString(),
                                        snapshot.child("name").getValue().toString(),
                                        snapshot.child("description").getValue().toString(),
                                        snapshot.child("image").getValue().toString(),
                                        snapshot.child("type").getValue().toString());
                                if(attraction.getType().equals("sight")){
                                   return attraction;
                                }
                            return null;
                            }
                        })
                        .build();


        adapter = new FirebaseRecyclerAdapter<Wishlist, WishlistViewHolder>(options) {
            @Override
            public WishlistViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                View view = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.wishlist_design, parent, false);
                return new WishlistViewHolder(view);
            }

            @Override
            protected void onBindViewHolder(final WishlistViewHolder holder, final int position, final Wishlist model) {
                holder.setDetails(getActivity(), model.getName(), model.getDescription(), model.getIdAttraction(), model.getImage());
            }
        };
        wishlist.setAdapter(adapter);
    }

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

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

1 Ответ

1 голос
/ 02 мая 2020

Мне кажется, этот запрос более полезен для вас.

query = FirebaseDatabase.getInstance().getReference("wishlist").child(user.getUid()).orderByChild("type").equalTo("sight");


FirebaseRecyclerOptions<Wishlist> options =
            new FirebaseRecyclerOptions.Builder<Wishlist>()
                    .setQuery(query, Wishlist.class)
                    .build();

Вы можете получить список wi sh, которые имеют тип зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...