Почему я не могу загрузить файл изображения с помощью ImageButton в Android Studio? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь загрузить изображение с помощью кнопки изображения. Я не получаю никакой ошибки или сообщения sh, но после загрузки своего изображения я получаю предупреждение: «Не удалось!» И сообщение e.

Не могли бы вы мне помочь, пожалуйста?

 private void uploadImage() {
        final ProgressDialog pd = new ProgressDialog(getContext());
        pd.setMessage("Uploading");
        pd.show();

        if(imageUri != null) {
            final StorageReference fileReference = storageReference.child(System.currentTimeMillis() + "." + getFileExtension(imageUri));
            uploadTask = fileReference.getFile(imageUri);
            uploadTask.continueWith(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
                @Override
                public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
                    if(!task.isSuccessful()) {
                        throw task.getException();
                    }
                    return fileReference.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {

                    if(task.isSuccessful()) {
                        Uri downloadUri = task.getResult();
                        String mUri = downloadUri.toString();
                        reference = FirebaseDatabase.getInstance().getReference().child("users").child(fuser.getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("imageURL", mUri);
                        reference.updateChildren(map);
                        pd.dismiss();
                    } else {
                        Toast.makeText(getContext(), "Failed!", Toast.LENGTH_SHORT).show();
                        pd.dismiss();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    pd.dismiss();
                }
            });
        } else {
            Toast.makeText(getContext(), "No Image Selected", Toast.LENGTH_SHORT).show();
        }
    }

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы нигде не вызываете метод fileReference.put, что означает, что вы не загружаете никаких данных.

Поэтому, когда вы вызываете fileReference.getDownloadURL(), выдается сообщение об ошибке, потому что в расположении нет файла, для которого нужно вернуть URL для загрузки.

Я рекомендую прочитать документацию по загрузке файлов и дождаться завершения загрузки, прежде чем пытаться получить URL загрузки.

1 голос
/ 16 апреля 2020

Если ваше сообщение об ошибке было:

Объект не существует в местоположении

Тогда это означает, что объект, который вы пытаетесь загрузить, просто не существует. Вот код, который вы используете для создания этого местоположения:

final StorageReference fileReference = storageReference
    .child(System.currentTimeMillis() + "." + getFileExtension(imageUri));

Итак, похоже, вы пытаетесь получить файл, который должен существовать, используя имя, которое соответствует текущему моменту времени. Я подозреваю, что это почти никогда не сработает. Поскольку мы не можем увидеть содержимое вашего хранилища и не знаем точную строку, которую вы здесь передаете, мы не знаем, как это исправить. Ваш код должен выбирать только те объекты, имена которых существуют в корзине.

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