如何使用 Android firebase-realtime-database 中的 CardView 在 RecyclerView 中显示数据?

马穆杜拉

我已经实现了它并且它运行成功。问题是,我在 Firebase 的每个唯一键下都有 3 个以上的项目。但它只显示添加到 Firebase 的最后一个项目。

这是下面的代码。提前致谢 :)

mAuth = FirebaseAuth.getInstance();
currentUserId = mAuth.getCurrentUser().getUid();
database = FirebaseDatabase.getInstance();
rootRef = database.getReference("rootDataRef");
ex_childRef = rootRef.child("ExchangeItemsData");
exrecyclerView = view.findViewById(R.id.exchangeRecyclerVeiwId);

GridLayoutManager glm = new GridLayoutManager(getContext(), 2);
    exrecyclerView.setLayoutManager(glm);
    fab = view.findViewById(R.id.load_exchange_fab_addId);
    fabMenu = view.findViewById(R.id.load_exchange_menuId);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AddExchangeItemFragment exFrag = new AddExchangeItemFragment();
            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
                    .replace(R.id.exchange_fragment_holderId, exFrag, "exc");
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
            fabMenu.setVisibility(View.GONE);
        }
    });
    return view;
}

@Override
public void onStart() {
    super.onStart();
    FirebaseRecyclerOptions<ImportExchangeItemModel> exoptions =
            new FirebaseRecyclerOptions.Builder<ImportExchangeItemModel>()
                    .setQuery(ex_childRef, ImportExchangeItemModel.class)
                    .build();
    FirebaseRecyclerAdapter<ImportExchangeItemModel, ExchangeItemViewHolder> exadapter
            = new FirebaseRecyclerAdapter<ImportExchangeItemModel, ExchangeItemViewHolder>(exoptions) {
        @NonNull
        @Override
        public ExchangeItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v=LayoutInflater.from(parent.getContext()).inflate(R.layout.exchange_single_row,parent,false);
            ExchangeItemViewHolder holder=new ExchangeItemViewHolder(v);
            return holder;
        }

        @Override
        protected void onBindViewHolder(@NonNull final ExchangeItemViewHolder holder, final int position, @NonNull ImportExchangeItemModel model) {

            final String userIds = getRef(position).getKey();
             ex_childRef.addListenerForSingleValueEvent(new ValueEventListener() {
                 @Override
                 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                     for (DataSnapshot dSnapshot:dataSnapshot.getChildren()){
                         for (DataSnapshot ds:dSnapshot.getChildren()){
                             final String exitemName=ds.child("exchangeProductName").getValue().toString();
                             final String exitemDesc =ds.child("productDesc").getValue().toString();
                             final String exitemImg =ds.child("imageUrl").getValue().toString();
                             holder.exItemName.setText(exitemName);
                             holder.exItemDesciption.setText(exitemDesc);
                             Picasso.get().load(exitemImg).into(holder.exItemImage);
                             holder.itemView.setOnClickListener(new View.OnClickListener() {
                                 @Override
                                 public void onClick(View v) {
                                     ExchangeItemsFragment fragment=new ExchangeItemsFragment();
                                     Bundle argss=new Bundle();
                                     argss.putString("exdataRoot",userIds);
                                     fragment.setArguments(argss);
                                     FragmentManager fragmentManager=getActivity().getSupportFragmentManager();
                                     FragmentTransaction transaction=fragmentManager.beginTransaction();
                                     transaction.replace(R.id.exchange_fragment_holderId,fragment,"exdetails");
                                     transaction.addToBackStack(null);
                                     transaction.commit();
                                 }
                             });
                         }
                     }
                 }

                 @Override
                 public void onCancelled(@NonNull DatabaseError databaseError) {

                 }
             });
        }
    };




    exrecyclerView.setAdapter(exadapter);
    exadapter.startListening();
}
public static class ExchangeItemViewHolder extends RecyclerView.ViewHolder{
    TextView exItemName,exItemDesciption;
    ImageView exItemImage;

    public ExchangeItemViewHolder(View itemView) {
        super(itemView);
        exItemName=itemView.findViewById(R.id.exchangeitemNameIdTV);
        exItemDesciption=itemView.findViewById(R.id.exchangeitemDescriptionCardViewId);
        exItemImage=itemView.findViewById(R.id.exchangeItemImageCardId);
    }
}

}

这是 firebase-database JSON 格式

"ExchangeItemsData" : {
  "lhmuj6n3g6Su1rv7XJLq5tV62yr2" : {
    "-LQQ7scByWcswW2VIPM5" : {
      "exchangeProductName" : "fsfsdfs",
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/binimoy-97025.appspot.com/o/ExchangeImages%2F2c2a91c8-0f3e-46ee-afd2-41141ee3c42b?alt=media&token=e8599f5c-b91c-415a-8e79-fcac737a4f9f",
      "phoneNo" : 5465464,
      "productDesc" : "fsdf",
      "productName" : "sdfsfds",
      "userID" : "lhmuj6n3g6Su1rv7XJLq5tV62yr2"
    },
    "-LQSjH-LB4ud-i6M2ZMa" : {
      "exchangeProductName" : "jgjhgjhg",
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/binimoy-97025.appspot.com/o/ExchangeImages%2F4da464a7-142b-4bf1-b92c-9852fc38878a?alt=media&token=105d17e7-87c4-45a2-92a6-7f74afaca145",
      "phoneNo" : 524343,
      "productDesc" : "gdfytfhg",
      "productName" : "hgfhfhg",
      "userID" : "lhmuj6n3g6Su1rv7XJLq5tV62yr2"
    },
    "-LQTBpwWcA2OycVgCyIR" : {
      "exchangeProductName" : "dasdsad",
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/binimoy-97025.appspot.com/o/ExchangeImages%2F82118232-89d8-47d0-8e60-57481eba67bd?alt=media&token=bf372222-dc97-43bf-9e86-058174bc2c71",
      "phoneNo" : 654654,
      "productDesc" : "asdasd",
      "productName" : "aasdasd",
      "userID" : "lhmuj6n3g6Su1rv7XJLq5tV62yr2"
    },
    "-LQTMxhmgbvRHzyPqRK2" : {
      "exchangeProductName" : "fsdfs",
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/binimoy-97025.appspot.com/o/ExchangeImages%2F96769920-279b-47a2-a6fc-adb23ebae5fa?alt=media&token=609e396a-dcd6-493e-ae64-5871318d5f6f",
      "phoneNo" : 546546,
      "productDesc" : "sfdsdf",
      "productName" : "fsdfsf",
      "userID" : "lhmuj6n3g6Su1rv7XJLq5tV62yr2"
    }
  }
},

基于火的数据库图像

帮帮我。谢谢你。

亚历克斯·马莫

您没有得到任何东西,RecyclerView因为您将一个FirebaseRecyclerOptions对象传递给包含错误查询的适配器。您缺少一个孩子,即用户 ID。为了解决这个问题,请更改以下代码行:

ex_childRef = rootRef.child("ExchangeItemsData");

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
ex_childRef = rootRef.child("ExchangeItemsData").child(uid);

你的问题将得到解决。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Recyclerview中显示Firebase数据而不重复

如何从Android中的Firebase Realtime数据库接收特定信息?

Firebase Realtime Database-检索数据的Android Studio

如何在Android中取消Firebase Realtime数据库正在进行的写入或删除操作

Android在RecyclerView中显示从json到cardview的数据

Android:如何在CardView中插入RecyclerView?

Android:如何在RecyclerView中扩展和折叠cardView的大小

如何获取cardView项目在recyclerView中的位置?

如何使用Firebase Realtime Database在不知道Android中索引的情况下更新ArrayList中的元素?

在Android中检索到textview时不显示Firebase Realtime Database

Android-CardView未显示在连接到Firebase的RecyclerView上

无法在RecyclerView和CardView中查看Firebase数据

如何从Firebase Realtime数据库中获取数据?

到recyclerview的Firebase数据显示错误-RecyclerView:android中未连接适配器

如何在Recyclerview Case中的cardview中显示停滞的gridImageView

Firebase中的数据未在RecyclerView中显示

如何从Realtime Database Firebase中的条件节点获取元素

RecyclerView中的多个CardView

CardView在RecyclerView中对齐

使用CardView的RecyclerView中的setLayoutManager NullPointException

如何从android中的json获取数据并在RecyclerView中显示?

使用 RecyclerView 在 CardView 中实现 WebView

如何缩小 RecyclerView 中 CardView 之间的空间?

如何从 Firebase 数据库过滤数据并将其显示到 android recyclerview 中?

使用 Fragments 在 recyclerView 中的 android 自定义 cardview

如何在 RecyclerView 中动态添加 CardView?

如何在 swift 4.0 中获取 firebase-realtime-database 中的特定值

使用cardview在recyclerview中显示json数据

在 Firebase RecyclerView Cardview 中单击项目时如何使用 onClickListener 打开新活动