微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我从前一个微调器中选择值时,如何获取微调器中某个子节点的值?

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

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

这是我的 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","dayOfCourse" : "Monday","endingTime" : "9:30AM","programName" : "Bscs","startingTime" : "8:00AM"
        }
      },"-MVY9hGxrp8Lz4JTOefy" : {
        "OOP" : {
          "courseName" : "OOP","dayOfCourse" : "Thursday","endingTime" : "9:00AM","-MVYHM0c7cMLersoUl2i" : {
        "Marketing Fundamental" : {
          "courseName" : "Marketing Fundamental","startingTime" : "8:00AM"
        }
      }
    },"Bsse" : {
      "-MVYHB3X_d4UozbBUDa3" : {
        "Marketing Fundamental" : {
          "courseName" : "Marketing Fundamental","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)
            {

            }

        });

解决方法

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

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

            }

        });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?