Проблема с намерением, которое берет и идентификатор из базы данных Firebase - PullRequest
1 голос
/ 07 мая 2020

У меня проблема с намерением из класса, который отправляет дополнительную строку с Course_ID, как вы можете видеть на изображении базы данных Firebase. Иногда в классе UploadFile.class строка, которая получает намерение с дополнительной строкой (которая содержит Course_ID), получает нулевое значение. Если вы порекомендуете мне новый метод подачи заявки на получение этого Course_ID из Firebase, я буду благодарен. Ниже этого текста прикреплены экран базы данных Firebase, ошибка, которую я иногда получаю в UploadFile.class, а также код для UploadFile.class и часть моего кода из класса, который отправляет это намерение с дополнительной строкой.

UploadFile.class

public class UploadFile extends AppCompatActivity {

    EditText denumire_material;
    Button selectare_material;
    ImageView adaugare_material;
    DatabaseReference databaseReference;
    FirebaseAuth mFirebaseAuth;
    FirebaseDatabase reference;
    private FirebaseStorage storage;
    private StorageReference storageReference;
    private Uri pdfUri;
    String url;
    String generatedFilePath;
    Uri downloadUri;
    TeacherCoursesFragment teacherCoursesFragment = new TeacherCoursesFragment();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_upload_file);

        denumire_material = findViewById(R.id.editBoxDenumireMaterial);
        selectare_material = findViewById(R.id.btnSelectareMaterial);
        adaugare_material = findViewById(R.id.imgAddMaterial);
        mFirebaseAuth = FirebaseAuth.getInstance();


        storageReference = FirebaseStorage.getInstance().getReference();
        reference = FirebaseDatabase.getInstance();
        databaseReference = FirebaseDatabase.getInstance().getReference().child("Materials").child(mFirebaseAuth.getCurrentUser().getUid());

        selectare_material.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(ContextCompat.checkSelfPermission(UploadFile.this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
                    selectPDF();
                } else{
                    ActivityCompat.requestPermissions(UploadFile.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},9);

                }
            }
        });

        adaugare_material.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(pdfUri!=null){
                    uploadFile(pdfUri);
                    adaugareDateInFirebase();
                } else{}
            }
        });
    }

        private void adaugareDateInFirebase(){
            DatabaseReference reference1 = FirebaseDatabase.getInstance().getReference();
            Query query = reference1.child(mFirebaseAuth.getCurrentUser().getUid());
                    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                    Date date = new Date();
                    String datee = dateFormat.format(date).toString();
                    String course_id = getIntent().getExtras().getString("course id").toString();
                    HashMap<String, Object> firebase = new HashMap<>();
                    firebase.put("Denumire_material", denumire_material.getText().toString());
                    firebase.put("Locatie_material", generatedFilePath);
                    firebase.put("Teacher_ID", mFirebaseAuth.getCurrentUser().getUid());
                    firebase.put("Course_ID", course_id);
                    firebase.put("Data_adaugarii", datee);
                    databaseReference.push().setValue(firebase).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if(task.isSuccessful()){

                            }
                        }
                    });
                }

        private void uploadFile(Uri pdfUri) {
        final String fileName = System.currentTimeMillis()+"";
        StorageReference storageReference = storage.getInstance().getReference();

        final StorageReference storageReference1 = storageReference.child("Materiale/" + mFirebaseAuth.getCurrentUser().getUid()+"/"+denumire_material.getText().toString());

        storageReference1.putFile(pdfUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                taskSnapshot.getStorage().getDownloadUrl().addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        generatedFilePath = task.getResult().toString();
                    }
                });
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(UploadFile.this, "File not succesfully uploaded", Toast.LENGTH_SHORT).show();
            }
        }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onProgress(@NonNull UploadTask.TaskSnapshot taskSnapshot) {

            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if(requestCode == 9 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            selectPDF();
        } else{
            Toast.makeText(UploadFile.this, "Permission denied", Toast.LENGTH_SHORT).show();

        }
    }
    }

TeacherCoursesFragments.class - класс, из которого я отправляю намерение с прикрепленной дополнительной строкой (конечно, он содержит идентификатор).

public class TeacherCoursesFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    v =  inflater.inflate(R.layout.fragment_teacher_courses, container, false);
    ImageView addCourseBtn = (ImageView) v.findViewById(R.id.btnAddCourse);

    recyclerView = v.findViewById(R.id.recyclerView_fragmentCourses);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    mAuth = FirebaseAuth.getInstance();
    FirebaseUser user = mAuth.getCurrentUser();
    String uid = user.getUid();
    createCourse = new CreateCourse();

    reference = FirebaseDatabase.getInstance().getReference().child("Courses").child("Teacher-Courses").child(uid);

    intent = new Intent(getActivity(), CreateCourse.class);
    addCourseBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(intent);
        }
    });


    return v;
}

@Override
public void onStart() {
    super.onStart();
    options = new FirebaseRecyclerOptions.Builder<Course>().setQuery(reference, Course.class).build();
    adapter = new FirebaseRecyclerAdapter<Course, CourseViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull final CourseViewHolder courseViewHolder, int i, @NonNull final Course course) {
            courseViewHolder.courseRealName.setText(course.getCourse_name());
            String numberOfStudents = String.valueOf(course.getCourse_students());
            courseViewHolder.realNumberOfStudents.setText(numberOfStudents);
            courseViewHolder.detailsButtonCourse2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), CourseMaterial.class);
                    intent.putExtra("course id", course.getCourse_ID());
                    intent.putExtra("teacher id", course.getTeacher_ID());
                    startActivity(intent);
                }
            });

            courseViewHolder.course_chenar.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), CourseOperations.class);
                    intent.putExtra("course name", course.getCourse_name());
                    intent.putExtra("course description", course.getCourse_description());
                    intent.putExtra("course points", String.valueOf(course.getCourse_points()));
                    intent.putExtra("course students", String.valueOf(course.getCourse_students()));
                    startActivity(intent);
                }
            });

            courseViewHolder.detailsButtonCourse.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(v.getContext(), UploadFile.class);
                    intent.putExtra("course id", course.getCourse_ID());
                    startActivity(intent);
                }
            });

        }

Я предполагается сделать 2 DatabaseReference, один для курсов для учителей и один для материалов? Я пробовал это, но я не могу получить Course_ID из курсов для учителей без намерения. Я искал в stackoverflow и в Google, но не нашел вообще никакого решения. Жду от вас ответов, советов или решений, если вы можете мне их дать. Спасибо!

Дополнительное объяснение: название курса, а также количество студентов (второе название) извлекаются из базы данных Firebase с помощью RecyclerViewAdapter и RecyclerViewOptions, как вы можете видеть в TeacherCoursesFragment.class. Первая кнопка перенаправляет на UploadFile.class, где я загружаю файл и устанавливаю sh имя для его сохранения в Firebase Storage. Вторая кнопка отправляет пользователя на другую страницу, где пользователь может выбрать один из нескольких вариантов (удалить, и т.д. c.).

1 Ответ

0 голосов
/ 07 мая 2020

Возможно, измените это в UploadFile:

String course_id = getIntent().getExtras().getString("course id").toString();

На это:

String course_id = getIntent().getStringExtra("course id");

Обновить:

Думаю, вам следует звонить getIntent() через onCreate():

через UploadFile

public class UploadFile extends AppCompatActivity {

........
//declare as member variable
private String course_id;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_upload_file);

//get it here
course_id = getIntent().getStringExtra("course id");
.......
.......
.......

}




}

Удалите эту строку, которую вы используете:

String course_id = getIntent().getExtras().getString("course id").toString();
...