Aby przesłać obrazy do przechowywania FireBase dołączam addOnSuccessListener na instancji storageference . Podczas podsumowania onSuccess Metoda dzwonię do getDownloadUrl() na instancji taskSnapshot, ale daje mi błąd mówiąc

Nie można rozwiązać metody Getdownloadurl ()

Ta aplikacja, którą stworzyłem 2 miesiące temu, wcześniej ta aplikacja była w porządku, a getDownloadUrl(). Również w taskSnapshot instance, gdy naciskam Ctrl + Space , w sugestiach nie znajduję metody getDownloadUrl(). Dlaczego się dzieje?

Kod do onActivityResult():

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == RC_SIGN_IN) {
        if (resultCode == RESULT_OK) {
            Toast.makeText(this, "Signed in!!!1", Toast.LENGTH_SHORT).show();
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "Failed to sign in", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
    else if(requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK){
        Uri selectedPhoto = data.getData();

        StorageReference localRefrence = storageReference.child(selectedPhoto.getLastPathSegment());

        //  Uploading the file on the storage
        localRefrence.putFile(selectedPhoto).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                 Uri downloadUrl = taskSnapshot.getDownloadUrl();

                FriendlyMessage message = new FriendlyMessage(mUsername, null, downloadUrl.toString());
                databaseReference.push().setValue(message);
            }
        });
    }
}
7
Neeraj Sewani 2 czerwiec 2018, 23:40

7 odpowiedzi

Najlepsza odpowiedź

API FireBase ma Zmieniono.

23 maja 2018

Wersja do przechowywania w chmurze 16.0.1

Usunięto przestarzały storeagemetadata.getdownloadurl () i uploadTask.tasksnapshot.getdownloadurl () Metody. Aby uzyskać aktualny adres URL pobierania, użyj StorageGareference.getdownloadur ().

UploadTask.TaskSnapshot ma Metoda nazwana {{x1 }}, który zwraca obiekt StorageMetadata.

To StorageMetadata Obiekt zawiera Metoda nazwana getReference() który zwraca obiekt StorageReference.

Że StorageReference Obiekt zawiera {x1}} metoda, która teraz zwraca obiekt zadań zamiast obiektu URI.

To zadanie musi być następnie słuchane w celu uzyskania URI, które można zrobić asynchronicznie lub w sposób blokujący; Zobacz Zadania API dla tego.

23
Daniel F 12 czerwiec 2018, 08:18

Nie otrzymasz teraz adresu URL pobierania obrazu

Profilimageurl = tasksnapshot. getdownloadurl (). Tostring (); Ta metoda jest przestarzałe.

Zamiast tego możesz użyć poniższej metody

uniqueId = UUID.randomUUID().toString();
ur_firebase_reference = storageReference.child("user_photos/" + uniqueId);

Uri file = Uri.fromFile(new File(mphotofile.getAbsolutePath()));
UploadTask uploadTask = ur_firebase_reference.putFile(file);

Task<Uri> urlTask = uploadTask.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
    @Override
    public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
        if (!task.isSuccessful()) {
            throw task.getException();
        }

        // Continue with the task to get the download URL
        return ur_firebase_reference.getDownloadUrl();
    }
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
    @Override
    public void onComplete(@NonNull Task<Uri> task) {
        if (task.isSuccessful()) {
            Uri downloadUri = task.getResult();
            System.out.println("Upload " + downloadUri);
            Toast.makeText(mActivity, "Successfully uploaded", Toast.LENGTH_SHORT).show();
            if (downloadUri != null) {

                String photoStringLink = downloadUri.toString(); //YOU WILL GET THE DOWNLOAD URL HERE !!!!
                System.out.println("Upload " + photoStringLink);

            }

        } else {
            // Handle failures
            // ...
        }
    }
});
5
MIDHUN CEASAR 20 wrzesień 2018, 11:58
final StorageReference filePath = mImageStore.child("profile_images").child("full_image").child(userId + ".jpg");
                filePath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        //Bitmap hochladen
                        uploadBitMap(uri.toString());
                    }
                });
3
Nicolai Rahm 26 lipiec 2018, 21:59

.getDownloadURL nie jest już dostępny i przestarzałe. z dokumentacji Task<Uri> i getdownloadUrl(); Asynchronicznie pobiera długotrwały adres URL pobierania z bokiem. Zobacz Dokumentacja

 @Override 
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
     Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl(); 
    while (!urlTask.isSuccessful());
     Uri downloadUrl = urlTask.getResult();
//continue with your code
1
griffins 22 czerwiec 2019, 10:56

Powinieneś spróbować tego. Zrozumieć go i spróbuj wdrożyć w twoich

buttonSetup.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = editText_name.getText().toString();
            if (!TextUtils.isEmpty(name) && mainImageURI != null) {
                final String user_id = firebaseAuth.getCurrentUser().getUid();
                progressBar_setup.setVisibility(View.VISIBLE);
                final StorageReference image_path = storageReference.child("profile_images").child(user_id + ".jpg");
                UploadTask uploadTask = image_path.putFile(mainImageURI);

                uploadTask.continueWithTask(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 image_path.getDownloadUrl();
                    }
                }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                    @Override
                    public void onComplete(@NonNull Task<Uri> task) {
                        if (task.isSuccessful()){
                            Uri downloadUrl = task.getResult();
                            Log.i("The URL : ", downloadUrl.toString());
                        }
                    }
                });
            }
        }
    });
0
Agung Pramono 30 grudzień 2018, 09:47

Metoda Getdownloadurl została zniszczona. Zamiast tego użyj następujących tasksnapshot.getmetadata (). GetReference (). Getdownloadurl (). Tostring ()

0
epiphmo 8 sierpień 2019, 18:50

Próbować

{
    firebase.storage()
    .child()
    .getDownloadURL().then()
}
0
David Buck 28 kwiecień 2020, 06:40