如何仅使用parseSnapshot解析特定数据?

问题描述 投票:0回答:1

为简单起见,我在Firebase数据库中有一个名为Wishlist的表,其中包含2种不同类型的对象:景点和景点。

Firebase Wishlist table

然后,在我的应用中,我只想在片段中仅显示愿望清单中的那些对象。我怎样才能做到这一点?现在,代码如下:(显然,如果我将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();
    }
}

java android firebase firebase-realtime-database snapshot
1个回答
0
投票

我认为此查询对您更有用。

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


FirebaseRecyclerOptions<Wishlist> options =
            new FirebaseRecyclerOptions.Builder<Wishlist>()
                    .setQuery(query, Wishlist.class)
                    .build();
© www.soinside.com 2019 - 2024. All rights reserved.