Atakan Akar
Atakan Akar

Reputation: 201

Query or create an algorithm to correlate between 2 childs of main on Firebase Database?

I want to a correlate between art and favorite. Favorite's children is user unique id. I want to do this specifically: show art children as 01,02,03,46,47,48,50,66,106 (These values are changeable).
Here is my general database structure:

Main:

Main

Art:

Art

Fav:

Fav And here is my code for get an idea:

private void callFavorites () {

        myRefArts = firebaseDatabase.getReference("art"); 

        favOptions = new FirebaseRecyclerOptions.Builder<Art>()
                .setQuery(myRefArts, Art.class).build();

        favAdapter = new FirebaseRecyclerAdapter<Art, ArtViewHolder>(favOptions) {
            @Override
            protected void onBindViewHolder(@NonNull ArtViewHolder holder, int position, @NonNull Art model) {

                holder.textViewArtName.setText(model.getArt_name());

                Picasso.with(getBaseContext()).load(model.getArt_image())
                        .into(holder.imageViewArtImage);

                holder.setItemClickListener(new ItemClickListener() {
                    @Override
                    public void onClick(View view, int position, boolean isLongClick) {
                        Toast.makeText(FavoriteActivity.this, "Henüz yapılmadı", Toast.LENGTH_SHORT).show();
                    }
                });

            }

            @NonNull
            @Override
            public ArtViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

                View view = LayoutInflater.from(viewGroup.getContext())
                        .inflate(R.layout.card_design_art,viewGroup,false);

                return new ArtViewHolder(view);
            }
        };

        rv.setAdapter(favAdapter);
        favAdapter.startListening();

    }

Upvotes: 0

Views: 59

Answers (1)

Frank van Puffelen
Frank van Puffelen

Reputation: 599776

What you have is known as indexed data, where your /favorite/$uid is an index into the items under /art/$artid. To display this using FirebaseUI, check out using FirebaseUI with indexed data.

The most important thing is that you need to pass in two queries/references to the adapter by calling setIndexedQuery: one reference to the main entities, and one query/reference to the index.

In your case that'd look something like:

myRefArts = firebaseDatabase.getReference("art"); 
myFavoritesIndex = firebaseDatabase.getReference("favorites").child(FirebaseAuth.getInstance().getCurrentUser().getUid());

favOptions = new FirebaseRecyclerOptions.Builder<Art>()
        .setIndexedQuery(myFavoritesIndex, myRefArts, Art.class).build();

Upvotes: 1

Related Questions