Как получить только указанные c данные в Recycler View с помощью базы данных Firebase? - PullRequest
2 голосов
/ 05 мая 2020

У меня проблема с получением определенных c данных из базы данных Firebase Realtime. Моя проблема в том, что я хочу отображать в RecyclerView только те материалы, у которых Course_ID (как вы можете видеть на изображении ниже) равен Course_ID (см. Курс -> Курсы для учителей в Firebase). Как я могу sh это сделать? Я прикреплю код, используемый в RecyclerView, и класс, содержащий модель. В качестве упоминания: 1. Я попытался добавить все идентификаторы курса из Firebase и сохранить их в списке, но приложение ничего не показывает и 2. В другом классе у меня есть намерение, которое отправляет меня сюда, а также отправляет дополнительная строка с Course_ID, которую я принял. Жду ваших ответов. Спасибо!

FileMaterial.class

public class FileMaterial {

private String Course_ID;
private String Denumire_material;
private String Locatie_material;
private String Teacher_ID;

public FileMaterial() {
}

public FileMaterial(String course_ID, String denumire_material, String locatie_material, String teacher_ID) {
    Course_ID = course_ID;
    Denumire_material = denumire_material;
    Locatie_material = locatie_material;
    Teacher_ID = teacher_ID;
}

public String getCourse_ID() {
    return Course_ID;
}

public void setCourse_ID(String course_ID) {
    Course_ID = course_ID;
}

public String getDenumire_material() {
    return Denumire_material;
}

public void setDenumire_material(String denumire_material) {
    Denumire_material = denumire_material;
}

public String getLocatie_material() {
    return Locatie_material;
}

public void setLocatie_material(String locatie_material) {
    Locatie_material = locatie_material;
}

public String getTeacher_ID() {
    return Teacher_ID;
}

public void setTeacher_ID(String teacher_ID) {
    Teacher_ID = teacher_ID;
}

CourseMaterial.class

public class CourseMaterial extends AppCompatActivity {

private RecyclerView recyclerView;
private DatabaseReference reference, userReference;
private FirebaseAuth mAuth;
FirebaseRecyclerOptions<FileMaterial> options;
FirebaseRecyclerAdapter<FileMaterial, CourseMaterial.FileViewHolder> adapter;
ImageView btnAddMaterial;
ImageView deleteMaterial;
StorageReference storageReference;
FirebaseStorage firebaseStorage;
String urlReference;
String value;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_course_material);
    value = getIntent().getStringExtra("course id").toString();
    mAuth = FirebaseAuth.getInstance();
    reference = FirebaseDatabase.getInstance().getReference().child("Materials").child(mAuth.getCurrentUser().getUid());
    recyclerView = findViewById(R.id.recyclerView_fileMaterials);
    recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

    btnAddMaterial = findViewById(R.id.addMaterials);
    btnAddMaterial.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(CourseMaterial.this, UploadFile.class));
        }
    });

}

@Override
public void onStart() {
    super.onStart();

    options = new FirebaseRecyclerOptions.Builder<FileMaterial>().setQuery(reference, FileMaterial.class).build();
    adapter = new FirebaseRecyclerAdapter<FileMaterial, FileViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final FileViewHolder fileViewHolder, int i, @NonNull final FileMaterial fileMaterial) {
                fileViewHolder.denumire_material.setText(fileMaterial.getDenumire_material());

            }


        @NonNull
        @Override
        public FileViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.youtube_view,parent, false);
            FileViewHolder fileViewHolder = new FileViewHolder(v);

            return  fileViewHolder;
        }
    };
    adapter.startListening();
    recyclerView.setAdapter(adapter);
}

public static class FileViewHolder extends RecyclerView.ViewHolder{
    TextView denumire_material, dataMaterial;
    ImageView deleteMaterial;
    public FileViewHolder(@NonNull View itemView) {
        super(itemView);
        denumire_material = itemView.findViewById(R.id.txtDenMaterial);
        deleteMaterial = itemView.findViewById(R.id.imgDeleteMaterial);
    }
}

1 Ответ

2 голосов
/ 06 мая 2020

Может быть, сделать query и передать его options адаптера:

@Override
public void onStart() {
    super.onStart();

Query query = reference.orderByChild("Course_ID").equalTo(value);

options = new FirebaseRecyclerOptions.Builder<FileMaterial>().setQuery(query, FileMaterial.class).build();

.......
.......
.......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...