Приложение падает при получении данных из базы данных Firebase - PullRequest
0 голосов
/ 06 января 2020

Я создал ссылку на хранилище, в котором мои изображения хранятся в папке с уникальным идентификатором пользователя (для вошедшего в систему пользователя), поэтому при загрузке изображения с этой ссылкой на хранилище изображение будет go в этом месте пожарного депо. , а также ссылка на базу данных для этого изображения. Все это загружается правильно и отображается в моей базе данных в реальном времени в ID пользователя, а также в хранилище Firebase. Тем не менее, при попытке просмотреть его в представлении утилиты, происходит сбой приложения, если я просто помещаю и хранилище, и ссылку на базу данных в качестве папки «uploads» в root базы данных и хранилища, оно работает нормально, но при попытке сделайте так, чтобы изображения были взяты в уникальную папку UserID в папке загрузки, это не работает.

Код ошибки, который я получаю: java .lang.NullPointerException: Попытка вызвать виртуальный метод 'void android .widget.Button.setOnClickListener (android .view.View $ OnClickListener)' для пустой ссылки на объект

После отладки возникает ошибка после:

mDatabaseRef.addValueEventListener(new ValueEventListener() {

в коде получения файла RecyclerView.

Здесь показано, что при нажатии кнопки загрузки изображения и ссылки на базу данных переносятся в правильное местоположение: enter image description here

enter image description here

Таким образом, проблема заключается в том, что невозможно найти изображения при их получении, поэтому если кто-то может дать мне правильный getReference для этого, или даже если Любая другая ошибка будет приветствоваться.

Задача загрузки файла

    if (mImageUri != null) {
        userID = mFirebaseAuth.getCurrentUser().getUid();
        StorageReference fileReference = mStorageRef.child(userID + "/" + System.currentTimeMillis() + "." + getFileExtension(mImageUri));

        mUploadTask = fileReference.putFile(mImageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                mProgressBar.setProgress(0);
                            }
                        }, 500);

                        Toast.makeText(getActivity(), "Upload successful", Toast.LENGTH_SHORT).show();
                        Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
                        while (!urlTask.isSuccessful());
                        Uri downloadUrl = urlTask.getResult();

                        Upload upload = new Upload(mEditTextFileName.getText().toString().trim(), mEditTextFileTags.getText().toString(),downloadUrl.toString() );

                        String uploadId = userID + "/" + mDatabaseRef.push().getKey();
                        mDatabaseRef.child(uploadId).setValue(upload);

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                        mProgressBar.setProgress((int) progress);
                    }
                });
    }           

RecyclerView получить код

    mDatabaseRef = FirebaseDatabase.getInstance().getReference("uploads/");
    mDatabaseRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                Upload upload = postSnapshot.getValue(Upload.class);
                mUploads.add(upload);
            }

            mAdapter = new ImageAdapter(getActivity(), mUploads);

            mRecyclerView.setAdapter(mAdapter);
        }

1 Ответ

0 голосов
/ 07 января 2020

Был пустой OnClickListener для кнопки, которую я еще не реализовал на моей странице ProfileFragment (которая содержит обзор recycler), мне пришлось удалить это, чтобы заставить его работать.

...