查询或创建算法以在Firebase数据库上的main的两个子项之间建立关联?

时间:2019-05-14 12:22:27

标签: java android firebase firebase-realtime-database firebaseui

我想把艺术和喜爱之间联系起来。最喜欢的孩子是用户唯一ID。我要具体执行此操作:将美术孩子显示为01,02,03,46,47,48,50,66,106(这些值是可变的)。
这是我的一般数据库结构:

主要:

Main

艺术:

Art

收藏夹

Fav 这是我的想法代码:

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();

    }

1 个答案:

答案 0 :(得分:0)

您拥有的被称为索引数据,其中/favorite/$uid/art/$artid下项目的索引。要使用FirebaseUI显示此内容,请签出using FirebaseUI with indexed data

最重要的是,您需要通过调用setIndexedQuery将两个查询/引用传递给适配器:一个对主要实体的引用,以及一个对索引的查询/引用。

在您的情况下,外观类似于:

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

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