简体   繁体   中英

How do i get the value of a certain child node in spinner when i select value from previous spinner?

I am trying to get the value of the course section into my spinner when I select the course name from my previous spinner. But it is not finding the key and its value but it is there. I don't know where I am doing wrong.

This is my firebase database structre:

"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"
        }
      }
    }
  },

For example, if I select the course name from program Bs-BBA or from any of the courses it should populate the course section spinner on the basis of my selection from the course name spinner.

Below is the java code for this that I have implemented so far:

 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)
            {

            }

        });

The proper solution for the above question is below:

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)
            {

            }

        });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM