【发布时间】:2020-05-24 07:23:52
【问题描述】:
我正在使用 JAVA 和 FIREBASE 开发一个 android 应用程序。我已将用户详细信息存储在 Firebase 实时数据库中。
我的问题是首先我想根据他们的课程和年份访问所有学生。例如,我想检索选择了 BCA 课程并且在第一年的学生。我不知道如何实现这一点。
这是我的代码。
主要活动
public class MainActivityStudentList extends AppCompatActivity {
private Button year1,year2,year3;
private RecyclerView studentRecyclerView;
private String branch,year = "1";
private DatabaseReference databaseReference;
private Query query;
private ShowStudentsAdapter showStudentsAdapter;
private List<AddStudents> addStudents;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_list);
assert getSupportActionBar() != null;
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
branch = getIntent().getStringExtra("branch");
year1 = findViewById(R.id.button1);
year2 = findViewById(R.id.button2);
year3 = findViewById(R.id.button3);
year1.setText("YEAR 1");
year2.setText("YEAR 2");
year3.setText("YEAR 3");
studentRecyclerView = findViewById(R.id.showRecyclerView);
studentRecyclerView.setHasFixedSize(true);
studentRecyclerView.setLayoutManager(new LinearLayoutManager(this));
addStudents = new ArrayList<>();
databaseReference = FirebaseDatabase.getInstance().getReference("STUDENTS");
getData();
year1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
year1.setBackgroundColor(getResources().getColor(R.color.white));
year2.setBackgroundColor(getResources().getColor(R.color.lightBlue));
year3.setBackgroundColor(getResources().getColor(R.color.lightBlue));
addStudents.clear();
year = "1";
getData();
}
});
year2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
year1.setBackgroundColor(getResources().getColor(R.color.lightBlue));
year2.setBackgroundColor(getResources().getColor(R.color.white));
year3.setBackgroundColor(getResources().getColor(R.color.lightBlue));
addStudents.clear();
year = "2";
getData();
}
});
year2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
year1.setBackgroundColor(getResources().getColor(R.color.lightBlue));
year2.setBackgroundColor(getResources().getColor(R.color.lightBlue));
year3.setBackgroundColor(getResources().getColor(R.color.lightBlue));
addStudents.clear();
year = "3";
getData();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
addStudents.clear();
}
private void getData(){
query = databaseReference.orderByChild("course").equalTo(branch);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
AddStudents addStudent = dataSnapshot1.getValue(AddStudents.class);
addStudents.add(addStudent);
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivityStudentList.this);
linearLayoutManager.setReverseLayout(true);
linearLayoutManager.setStackFromEnd(true);
studentRecyclerView.setLayoutManager(linearLayoutManager);
showStudentsAdapter = new ShowStudentsAdapter(MainActivityStudentList.this, addStudents);
studentRecyclerView.setAdapter(showStudentsAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(MainActivityStudentList.this, databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
}
适配器类
public class ShowStudentsAdapter extends RecyclerView.Adapter<ShowStudentsAdapter.showStudentViewHolder> {
private Context dContext;
private List<AddStudents> addStudents;
public ShowStudentsAdapter(Context context,List<AddStudents> addStudent){
dContext = context;
addStudents = addStudent;
}
@NonNull
@Override
public showStudentViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(dContext).inflate(R.layout.show_faculty_cardview,parent,false);
return new showStudentViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull showStudentViewHolder holder, int position) {
AddStudents dAddStudent = addStudents.get(position);
holder.name.setText(dAddStudent.getName());
holder.course.setText(dAddStudent.getCourse());
holder.year.setText(dAddStudent.getYear());
}
@Override
public int getItemCount() {
return addStudents.size();
}
public class showStudentViewHolder extends RecyclerView.ViewHolder{
TextView name,course,year;
ImageView delete;
public showStudentViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.fName);
course = itemView.findViewById(R.id.fEmail);
year = itemView.findViewById(R.id.fPosition);
delete = itemView.findViewById(R.id.fDelete);
}
}
}
我在主要活动中有 3 个按钮,称为 year1、year2、year3,当我点击 year1 时,我想显示所有 BCA 第一年的学生,其他按钮也是如此。
任何帮助都会很棒。
【问题讨论】:
标签: java android android-studio firebase-realtime-database