.getDownloadUrl () выдает ошибку - Android - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь поместить данные в базу данных firebase, но .getDownloadUrl () выдает ошибку - не удается разрешить метод, я что-то упустил? Я думаю, что я должен сделать это по-другому

Android Studio Screenshot

Пожалуйста, помогите мне, изменив этот код и ответив.

Вот код -

StorageReference file = FirebaseStorage.getInstance().getReference().child("message_images").child(messageId + ".jpg");

            file.putFile(url).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>()
            {
                @Override
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)
                {
                    if(task.isSuccessful())
                    {
                        String imageUrl = task.getResult().getDownloadUrl().toString(); //here is the error

                        Map messageMap = new HashMap();
                        messageMap.put("message", imageUrl);
                        messageMap.put("type", "image");
                        messageMap.put("from", currentUserId);
                        messageMap.put("to", otherUserId);
                        messageMap.put("timestamp", ServerValue.TIMESTAMP);

                        HashMap<String, String> notificationData = new HashMap<>();
                        notificationData.put("from", currentUserId);
                        notificationData.put("type", "message");

                        Map userMap = new HashMap();
                        userMap.put("Messages/" + currentUserId + "/" + otherUserId + "/" + messageId, messageMap);
                        userMap.put("Messages/" + otherUserId + "/" + currentUserId + "/" + messageId, messageMap);

                        userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/message", "You have sent a picture.");
                        userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/timestamp", ServerValue.TIMESTAMP);
                        userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/seen", ServerValue.TIMESTAMP);

                        userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/message", "Has send you a picture.");
                        userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/timestamp", ServerValue.TIMESTAMP);
                        userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/seen", 0);

                        userMap.put("Notifications/" + otherUserId + "/" + notificationId, notificationData);

                        FirebaseDatabase.getInstance().getReference().updateChildren(userMap, new DatabaseReference.CompletionListener()
                        {
                            @Override
                            public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference)
                            {
                                sendButton.setEnabled(true);

                                if(databaseError != null)
                                {
                                    Log.d(TAG, "sendMessage(): updateChildren failed: " + databaseError.getMessage());
                                }
                            }
                        });
                    }
                }
            });

Ответы [ 3 ]

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

правильный код: task.getResult().getMetadata().getReference().getDownloadUrl();

1 голос
/ 05 мая 2020

Используйте OnSuccessListener вместо OnComplete, код, который вы используете, загрузит файл изображения, но не сохранит его URL в базе данных Firebase. Так что используйте это вместо -

final StorageReference file = FirebaseStorage.getInstance().getReference().child("message_images").child(messageId + ".jpg");

            file.putFile(url).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    file.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                            String imageUrl = uri.toString();

                            Map messageMap = new HashMap();
                            messageMap.put("message", imageUrl);
                            messageMap.put("type", "image");
                            messageMap.put("from", currentUserId);
                            messageMap.put("to", otherUserId);
                            messageMap.put("timestamp", ServerValue.TIMESTAMP);

                            HashMap<String, String> notificationData = new HashMap<>();
                            notificationData.put("from", currentUserId);
                            notificationData.put("type", "message");

                            Map userMap = new HashMap();
                            userMap.put("Messages/" + currentUserId + "/" + otherUserId + "/" + messageId, messageMap);
                            userMap.put("Messages/" + otherUserId + "/" + currentUserId + "/" + messageId, messageMap);

                            userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/message", "You have sent a picture.");
                            userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/timestamp", ServerValue.TIMESTAMP);
                            userMap.put("Chat/" + currentUserId + "/" + otherUserId + "/seen", ServerValue.TIMESTAMP);

                            userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/message", "Has send you a picture.");
                            userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/timestamp", ServerValue.TIMESTAMP);
                            userMap.put("Chat/" + otherUserId + "/" + currentUserId + "/seen", 0);

                            userMap.put("Notifications/" + otherUserId + "/" + notificationId, notificationData);

                            FirebaseDatabase.getInstance().getReference().updateChildren(userMap, new DatabaseReference.CompletionListener() {
                                @Override
                                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                                    sendButton.setEnabled(true);

                                    if (databaseError != null) {
                                        Log.d(TAG, "sendMessage(): updateChildren failed: " + databaseError.getMessage());
                                    }
                                }
                            });
                        }
                    });
                }
            });
1 голос
/ 27 апреля 2020

Вы должны добавить getStorage()

String imageUrl = task.getResult().getStorage().getDownloadUrl().toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...