Android taskSnapshot.getDownloadUrl()已弃用

Android taskSnapshot.getDownloadUrl()已弃用,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,直到现在,从Firebase中存储的文件中获取url的方法,我都是这样做的 taskSnapshot.getDownloadUrl,但现在已经不推荐了,我应该使用哪种方法 您可以使用。请注意,它返回一个任务,因此您必须记住将其异步处理,就像处理任何其他任务一样。正如Doug所说,您需要在任务内部运行它 下面是您需要如何实现它的提示 final StorageReference ref = storageRef.child("your_REF"); uploadTask = ref.putFile

直到现在,从Firebase中存储的文件中获取url的方法,我都是这样做的
taskSnapshot.getDownloadUrl
,但现在已经不推荐了,我应该使用哪种方法


您可以使用。请注意,它返回一个任务,因此您必须记住将其异步处理,就像处理任何其他任务一样。

正如Doug所说,您需要在任务内部运行它

下面是您需要如何实现它的提示

final StorageReference ref = storageRef.child("your_REF");
uploadTask = ref.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 ref.getDownloadUrl();
        }
    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            if (task.isSuccessful()) {
                Uri downloadUri = task.getResult();
                String downloadURL = downloadUri.toString();
            } else {
                // Handle failures
                // ...
            }
        }
    });
final-storagereferef=storageRef.child(“您的_-ref”);
uploadTask=ref.putFile(文件);
Task urlTask=uploadTask.continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
//继续执行任务以获取下载URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Uri downloadUri=task.getResult();
字符串downloadURL=downloadUri.toString();
}否则{
//处理故障
// ...
}
}
});
有关如何实现它的更多信息,您可以查看我回答此问题7天后打开的github问题添加以下代码:

Task<Uri> downUrl=taskSnapshot.getMetadata().getReference().getDownloadUrl();
Log.i("url:",downUrl.getResult().toString());
Task downloadURL=taskSnapshot.getMetadata().getReference().getDownloadUrl();
Log.i(“url:,downUrl.getResult().toString());
//首先创建StorageReference的实例(在此代码段中,它是storageRef)
StorageReference文件路径=storageRef.child(“images.jpg”);
//如果存储中存在文件,则此操作有效。
filepath.getDownloadUrl().addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
String downloadUrl=task.getResult().toString();
//downloadurl将作为结果答案
}
});

您现在无法使用

ImageUrl=taskSnapshot.getDownloadUrl().toString(); 此方法已弃用

相反,您可以使用以下方法

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
            // ...
        }
    }
});
uniqueId=UUID.randomuid().toString();
ur_firebase_reference=storageReference.child(“用户照片/”+uniqueId);
Uri file=Uri.fromFile(新文件(mphotofile.getAbsolutePath());
UploadTask UploadTask=ur_firebase_reference.putFile(文件);
Task urlTask=uploadTask.continueWithTask(新的Continuation(){
@凌驾
公共任务(@NonNull Task Task)引发异常{
如果(!task.issusccessful()){
抛出task.getException();
}
//继续执行任务以获取下载URL
返回ur_firebase_引用。getDownloadUrl();
}
}).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Uri downloadUri=task.getResult();
System.out.println(“上传”+下载URI);
Toast.makeText(mActivity,“已成功上载”,Toast.LENGTH_SHORT.show();
if(downloadUri!=null){
字符串photoStringLink=downloadUri.toString();//您将在此处获得下载URL!!!!
System.out.println(“上传”+photoStringLink);
}
}否则{
//处理故障
// ...
}
}
});
您可以通过添加进度侦听器来跟踪上载进度

uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
            double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
            System.out.println("Upload is " + progress + "% done");
            Toast.makeText(mContext, "Upload is " + progress + "% done", Toast.LENGTH_SHORT).show();
        }
    }).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
            System.out.println("Upload is paused");
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle unsuccessful uploads
        }
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            // Handle successful uploads on complete
            // ...
        }
    });
uploadTask.addOnProgressListener(新的OnProgressListener(){
@凌驾
public void onProgress(UploadTask.TaskSnapshot TaskSnapshot){
双进度=(100.0*taskSnapshot.GetByTestTransferred())/taskSnapshot.getTotalByteCount();
System.out.println(“上传为”+进度+%完成”);
Toast.makeText(mContext,“上载为”+进度+%done”,Toast.LENGTH_SHORT.show();
}
}).addOnPausedListener(新的OnPausedListener(){
@凌驾
public void onPaused(UploadTask.TaskSnapshot TaskSnapshot){
System.out.println(“上传暂停”);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理不成功的上传
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//处理完成后的成功上载
// ...
}
});

只需使用任务而不是ref.putFile(uriImage) .addOnSuccessListener(新的OnSuccessListener() 如今,firebase参考建议使用Uploadtask对象

我是这样做的:

UploadTask uploadTask;
        uploadTask = storageReferenceProfilePic.putFile(uriProfileImage );

        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 storageReferenceProfilePic.getDownloadUrl();
            }
        }).addOnCompleteListener(new OnCompleteListener<Uri>() {
            @Override
            public void onComplete(@NonNull Task<Uri> task) {
                if (task.isSuccessful()) {
                    progressBarImageUploading.setVisibility(View.GONE);
                    Uri downloadUri = task.getResult();
                    profileImageUrl = downloadUri.toString();
                    ins.setText(profileImageUrl);
                } else {
                    // Handle failures
                    // ...
                }
            }
        });
现在profileImageUrl包含类似“”的内容,这是访问图像的url

现在,您可以随意使用字符串profileImageUrl。例如,使用Glide或Fresco库将url加载到ImageView中。

这段代码适合我

你可以试试

package br.com.amptec.firebaseapp;

import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import java.io.ByteArrayOutputStream;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {

    private DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    private FirebaseAuth auth = FirebaseAuth.getInstance();

    private Button btnUpload;
    private ImageView imgPhoto;


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

        btnUpload = findViewById(R.id.btnUpload);
        imgPhoto = findViewById(R.id.imgPhoto);

        btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                imgPhoto.setDrawingCacheEnabled(true);
                imgPhoto.buildDrawingCache();
                Bitmap bitmap = imgPhoto.getDrawingCache();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                byte[] imageBytes = baos.toByteArray();
                String fileName = UUID.randomUUID().toString();

                StorageReference storageReference = FirebaseStorage.getInstance().getReference();
                StorageReference images = storageReference.child("images");
                StorageReference imageRef = images.child(fileName + ".jpeg");

                UploadTask uploadTask = imageRef.putBytes(imageBytes);

                uploadTask.addOnFailureListener(MainActivity.this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, "Upload Error: " +
                                e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                }).addOnSuccessListener(MainActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        //Uri url = taskSnapshot.getDownloadUrl();
                        Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
                        while(!uri.isComplete());
                        Uri url = uri.getResult();

                        Toast.makeText(MainActivity.this, "Upload Success, download URL " +
                                url.toString(), Toast.LENGTH_LONG).show();
                        Log.i("FBApp1 URL ", url.toString());
                    }
                });
            }
        });
    }
}
包br.com.amptec.firebaseapp;
导入android.graphics.Bitmap;
导入android.net.Uri;
导入android.provider.contacts合同;
导入android.support.annotation.NonNull;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageView;
导入android.widget.Toast;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.OnFailureListener;
导入com.google.android.gms.tasks.OnSuccessListener;
导入com.google.android.gms.tasks.Task;
导入com.google.firebase.au
Uri downloadUri = task.getResult();
profileImageUrl = downloadUri.toString();
package br.com.amptec.firebaseapp;

import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;

import java.io.ByteArrayOutputStream;
import java.util.UUID;

public class MainActivity extends AppCompatActivity {

    private DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    private FirebaseAuth auth = FirebaseAuth.getInstance();

    private Button btnUpload;
    private ImageView imgPhoto;


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

        btnUpload = findViewById(R.id.btnUpload);
        imgPhoto = findViewById(R.id.imgPhoto);

        btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                imgPhoto.setDrawingCacheEnabled(true);
                imgPhoto.buildDrawingCache();
                Bitmap bitmap = imgPhoto.getDrawingCache();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
                byte[] imageBytes = baos.toByteArray();
                String fileName = UUID.randomUUID().toString();

                StorageReference storageReference = FirebaseStorage.getInstance().getReference();
                StorageReference images = storageReference.child("images");
                StorageReference imageRef = images.child(fileName + ".jpeg");

                UploadTask uploadTask = imageRef.putBytes(imageBytes);

                uploadTask.addOnFailureListener(MainActivity.this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, "Upload Error: " +
                                e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                }).addOnSuccessListener(MainActivity.this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        //Uri url = taskSnapshot.getDownloadUrl();
                        Task<Uri> uri = taskSnapshot.getStorage().getDownloadUrl();
                        while(!uri.isComplete());
                        Uri url = uri.getResult();

                        Toast.makeText(MainActivity.this, "Upload Success, download URL " +
                                url.toString(), Toast.LENGTH_LONG).show();
                        Log.i("FBApp1 URL ", url.toString());
                    }
                });
            }
        });
    }
}
uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                Task<Uri> firebaseUri = taskSnapshot.getStorage().getDownloadUrl();
                firebaseUri.addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        String url = uri.toString();
                        Log.e("TAG:", "the url is: " + url);

                        String ref = yourStorageReference.getName();
                        Log.e("TAG:", "the ref is: " + ref);
                    }
                });
            }
        });
Task<Uri> task = taskSnapshot.getMetadata().getReference().getDownloadUrl();
task.addOnSuccessListener(new OnSuccessListener<Uri>() {
       @Override
        public void onSuccess(Uri uri) {
              String photoLink = uri.toString();
        }
});