首页 > 解决方案 > 当我从前一个微调器中选择值时,如何获取微调器中某个子节点的值?

问题描述

当我从以前的微调器中选择课程名称时,我试图将课程部分的值放入我的微调器中。但它没有找到关键及其价值,但它就在那里。我不知道我在哪里做错了。

这是我的 Firebase 数据库结构:

"Courses Details" : {
    "Bs-BBA" : {
      "-MVuhKkfxjHkZmTfsITM" : {
        "Economics" : {
          "courseName" : "Economics",
          "courseSection" : "A",    // These are the values that i am tryng my spinner to get populated with
          "dayOfCourse" : "Tuesday",
          "endingTime" : "1:30Pm",
          "programName" : "Bs-BBA",
          "startingTime" : "12:00Pm"
        }
      }
    },
    "Bscs" : {
      "-MVWl1uq9fA4AlYRfMIv" : {
        "Data structure" : {
          "courseName" : "Data structure",
          "courseSection" : "A",
          "dayOfCourse" : "Monday",
          "endingTime" : "9:30AM",
          "programName" : "Bscs",
          "startingTime" : "8:00AM"
        }
      },
      "-MVY9hGxrp8Lz4JTOefy" : {
        "OOP" : {
          "courseName" : "OOP",
          "courseSection" : "A",
          "dayOfCourse" : "Thursday",
          "endingTime" : "9:00AM",
          "programName" : "Bscs",
          "startingTime" : "8:00AM"
        }
      },
      "-MVYHM0c7cMLersoUl2i" : {
        "Marketing Fundamental" : {
          "courseName" : "Marketing Fundamental",
          "courseSection" : "A",
          "dayOfCourse" : "Thursday",
          "endingTime" : "9:00AM",
          "programName" : "Bscs",
          "startingTime" : "8:00AM"
        }
      }
    },
    "Bsse" : {
      "-MVYHB3X_d4UozbBUDa3" : {
        "Marketing Fundamental" : {
          "courseName" : "Marketing Fundamental",
          "courseSection" : "A",
          "dayOfCourse" : "Thursday",
          "endingTime" : "9:00AM",
          "programName" : "Bsse",
          "startingTime" : "8:00AM"
        }
      }
    }
  },

例如,如果我从程序 Bs-BBA 或任何课程中选择课程名称,它应该根据我从课程名称微调器中的选择填充课程部分微调器。

下面是我迄今为止实现的java代码:

 spinnerForCourseSection = findViewById(R.id.course_sec) ;

        spinnerForCourseSecArrayList = new ArrayList<>();
        spinnerForCourseSecArrayAdapter =new ArrayAdapter<String>(AssignCoursesToFaculty.this, android.R.layout.simple_spinner_dropdown_item, spinnerForCourseSecArrayList);
        spinnerForCourseSection.setAdapter(spinnerForCourseSecArrayAdapter);

        spinnerForCourseName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {

                // if ( parent.getItemAtPosition(position).equals(spinnerForProgramNameArrayList) )
                //{ }

                String selectedValueFromSpinnerProgramName = spinnerForProgramName.getSelectedItem().toString() ;

                String selectedValueFromSpinnerCourseName = spinnerForCourseName.getSelectedItem().toString() ;

                ValueEventListener listener;

                final DatabaseReference rootRef;
                rootRef = FirebaseDatabase.getInstance().getReference().child("Courses Details");

                listener = rootRef.addValueEventListener( new ValueEventListener()
                {

                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot)
                    {

                        //if( snapshot.child(selectedValueFromSpinnerCourseName).exists() )
                        //{

                        spinnerForCourseSecArrayList.clear();


                        for( DataSnapshot programNameKey: snapshot.getChildren() )
                        {

                            for (DataSnapshot courseNameKey : programNameKey.getChildren())
                            {

                                for (DataSnapshot courseNameDetails : courseNameKey.child(selectedValueFromSpinnerCourseName).getChildren())
                                {

                                    if (courseNameDetails.child("courseSection").exists())
                                    {

                                        spinnerForCourseSecArrayList.add(courseNameDetails.child("courseSection").getValue().toString());

                                    }

                                }

                            }

                        }

                        spinnerForCourseSecArrayAdapter.notifyDataSetChanged();

                        //}

                    }

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

                    }
                });

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {

            }

        });

标签: javaandroidfirebasefirebase-realtime-database

解决方案


上述问题的正确解决方案如下:

spinnerForCourseSection = findViewById(R.id.course_sec) ;

        spinnerForCourseSecArrayList = new ArrayList<>();
        spinnerForCourseSecArrayAdapter =new ArrayAdapter<String>(AssignCoursesToFaculty.this, android.R.layout.simple_spinner_dropdown_item, spinnerForCourseSecArrayList);
        spinnerForCourseSection.setAdapter(spinnerForCourseSecArrayAdapter);

        spinnerForCourseName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {


                String selectedValueFromSpinnerProgramName = spinnerForProgramName.getSelectedItem().toString() ;

                String selectedValueFromSpinnerCourseName = spinnerForCourseName.getSelectedItem().toString() ;

                ValueEventListener listener;

                final DatabaseReference rootRef;
                rootRef = FirebaseDatabase.getInstance().getReference().child("Courses Details");

                listener = rootRef.addValueEventListener( new ValueEventListener()
                {

                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot)
                    {


                        spinnerForCourseSecArrayList.clear();


                        for( DataSnapshot programNameKey: snapshot.getChildren() )
                        {

                            for (DataSnapshot randomIdKey : programNameKey.getChildren())
                            {

                                for (DataSnapshot courseNameKey : randomIdKey.child(selectedValueFromSpinnerCourseName).getChildren())
                                {

                                    String courseNameDetail = courseNameKey.getKey();

                                    if( courseNameKey.child(courseNameDetail).getKey().equals("courseSection") )
                                    {

                                        spinnerForCourseSecArrayList.add(courseNameKey.getValue().toString());

                                    }

                                }

                            }

                        }

                        spinnerForCourseSecArrayAdapter.notifyDataSetChanged();

                    }

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

                    }
                });

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {

            }

        });

推荐阅读