如何解决当我从前一个微调器中选择值时,如何获取微调器中某个子节点的值?
当我从之前的微调器中选择课程名称时,我试图将课程部分的值放入我的微调器中。但它没有找到密钥及其值,但它就在那里。我不知道我哪里做错了。
这是我的 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 举报,一经查实,本站将立刻删除。