首页 > 解决方案 > 我已经使用了数据库引用,那么为什么我要将所有用户数据都放入 recyclerview 我只希望一个用户数据进入 recycler 视图?

问题描述

下面是我当前的回收器视图屏幕截图...当我搜索单个用户时,我得到了所有 8 个节点的详细信息数据,但它也添加到了我不想要的另一个用户子节点的列表中。

我的 Firebase 数据库结构如下:

我的 Firebase 数据库结构

我只想要单个用户“staydetails”。而不是在我的回收器适配器中,我正在获取所有用户数据。

当我在搜索一个用户时添加多个用户及其房间住宿详细信息时,它会将所有用户住宿详细信息数据提供给适配器。这是我的 MainActivity 回收器视图,带有适配器和数据库参考。先感谢您

    final String userformno = mobileorformnosearch.getText().toString().trim();
    globalmobileno = userformno;
    if (userformno.trim().length() == 10) {
        list.clear();
        PassDataRef = FirebaseDatabase.getInstance().getReference().child("Passanger");
        PassDataRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot datas : dataSnapshot.getChildren()) {


                    if (dataSnapshot.hasChild(userformno)) {
                        // run some code

                        //MobileNoDataWise
                        UserDataRegistration user = dataSnapshot.child(userformno).getValue(UserDataRegistration.class);

                        YatriName.setText(user.getUsername());
                        YatriAge.setText(user.getAge());
                        YatriCity.setText(user.getCity());
                        Yatriphonenumber.setText(user.getMobileno());
                        YatriformNo.setText(user.getFormno());
                        YatriCoachNo.setText(user.getCoachno());
                        YatriSeatNo.setText(user.getSeatno());
                        YatriBearth.setText(user.getBearth());
                        YatriBusno22.setText(user.getBustwono());
                        YatriBusSeatNo22.setText(user.getBustwoseatno());
                        YatriBusno32.setText(user.getBusthreeno());
                        YatriBusSeatNo32.setText(user.getBusthreeseatno());
                        YatriPhotoUri.setText(user.getProfilephoto());
                        YatriGender.setText(user.getGender());
                        YatriMBusno.setText(user.getMbusno());
                        YatriMBusSeatno.setText(user.getMseatno());
                        // String url ="https://firebasestorage.googleapis.com/v0/b/uttammangal-ad8b8.appspot.com/o/profilepic%2F223.jpg?alt=media&token=703bcc8f-c2c3-4beb-bffc-40e52daa572d";// user.getProfilephoto();
                        String Url = user.getProfilephoto();
                        if (Url != null) {

                            Picasso
                                    .get()
                                    .load(Url)
                                    .resize(200, 200) // resizes the image to these dimensions (in pixel)
                                    .centerCrop()
                                    .into(YatriImageView);
                            // Glide.with(getApplicationContext()).load(Url).into(YatriImageView);
                        } else {

                            Toast.makeText(MainActivity.this, "NO Image Found!!", Toast.LENGTH_LONG).show();

                        }

                        RecycleDataRef = FirebaseDatabase.getInstance().getReference("Passanger");
                        list.clear();
                       Query  qry = RecycleDataRef.child(userformno).child("StayDetails");
                        qry.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
                                for (DataSnapshot dataSnapshot2 : dataSnapshot1.getChildren()) {
                                    //UserDataRegistration user = dataSnapshot.child(userformno).getValue(UserDataRegistration.class);

                                        UserDataRetrieve u = dataSnapshot2.getValue(UserDataRetrieve.class);
                                        //UserDataRetrieve u = dataSnapshot1.getValue(UserDataRetrieve.class);

                                        list.add(u);

                                }

                                adapter = new MyAdapter(MainActivity.this, list);

                                recyclerView.setAdapter(adapter);
                            }

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

                            }
                        });


                    } else {
                        Toast toast = Toast.makeText(MainActivity.this, "No Record Found!!!!!", Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER, 0, 0);
                        toast.show();
                        break;
                    }

                }//ForloopClosing
                return;
            } //Main DataSnapshot Profile Data closing


            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(MainActivity.this, "Please Enter Valid MobileNo!!", Toast.LENGTH_LONG).show();

            }


        }); //addvaluelistner main profile Data Closing

        //} //Query node equals closing


    } else {
        Toast.makeText(MainActivity.this, "Please Enter 10 Digit MobileNo!!", Toast.LENGTH_LONG).show();

    }

} //OnClick Closing

标签: androidjsonfirebase-realtime-databaseandroid-recyclerview

解决方案


您可以简单地通过搜索获取​​所需的用户数据,而不是遍历所有用户,如下所示:

FirebaseDatabase.getInstance().getReference().child("Passanger").child(userformno).addListenerForSingleValueEvent(
        new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                UserDataRegistration user = dataSnapshot.getValue(UserDataRegistration.class);

                ...

                if(dataSnapshot.hasChild("StayDetails")) {
                    for (DataSnapshot dataSnapshot2 : dataSnapshot.child("StayDetails").getChildren()) {
                        UserDataRetrieve u = dataSnapshot2.getValue(UserDataRetrieve.class);
                        //UserDataRetrieve u = dataSnapshot1.getValue(UserDataRetrieve.class);
                        list.add(u);
                    }

                   ...

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast toast = Toast.makeText(MainActivity.this, "No Record Found!!!!!", Toast.LENGTH_SHORT);
                toast.setGravity(Gravity.CENTER, 0, 0);
                toast.show();
            }
        }
);

希望这将为您提供所需的确切数据。


推荐阅读