首页 > 解决方案 > 查询或创建一个算法来关联 Firebase 数据库上 main 的 2 个子项?

问题描述

我想在艺术和最爱之间建立联系。最喜欢的孩子是用户唯一的 id。我想专门这样做:将艺术儿童显示为 01,02,03,46,47,48,50,66,106(这些值是可变的)。
这是我的一般数据库结构:

主要的:

主要的

艺术:

艺术

最爱:

最喜欢的 这是我的想法的代码:

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

    }

标签: javaandroidfirebasefirebase-realtime-databasefirebaseui

解决方案


您所拥有的称为索引数据,其中您/favorite/$uid是 . 下项目的索引/art/$artid。要使用 FirebaseUI 显示此内容,请使用带有索引数据的 FirebaseUI 进行检查。

最重要的是,您需要通过调用向适配器传递两个查询/引用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();

推荐阅读