java - 当我从前一个微调器中选择值时,如何获取微调器中某个子节点的值?
问题描述
当我从以前的微调器中选择课程名称时,我试图将课程部分的值放入我的微调器中。但它没有找到关键及其价值,但它就在那里。我不知道我在哪里做错了。
这是我的 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)
{
}
});
解决方案
上述问题的正确解决方案如下:
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)
{
}
});
推荐阅读
- javascript - 如何从当前时间获取过去的天数
- javascript - 电子滑雪画布未将文本添加到图像画布
- linux - LINUX - 左连接 2 个带标题的 txt 表
- javascript - Textarea 输入不呈现 HTML
- vba - MS Access 中的情况
- python - 会话过期时从数据库中删除记录
- c# - 将多种类型的列表组合成一个可迭代对象
- javascript - 是否可以更改最初相同范围的变量范围?
- pandas - 在不丢失索引名称的情况下将具有索引值的行追加/插入到索引数据框中?
- firebase - Flutter 从 google firebase 加载图像非常慢