要将图片上传到 Firebase存储空间,我会在 StorageReference 的实例上附加addOnSuccessListener
。虽然覆盖了onSuccess
方法,但我在getDownloadUrl()
的实例上调用了taskSnapshot
,但它却给我一个错误说
无法解析方法getDownloadUrl()
这个我2个月前创建的应用程序,此应用程序运行良好,getDownloadUrl()
工作正常。另外,在taskSnapshot
实例中,当我按 Ctrl + space 时,在建议中我找不到getDownloadUrl()
方法。为什么会这样?
代码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);
}
});
}
}
答案 0 :(得分:21)
Firebase API有changed。
2018年5月23日
云存储版本16.0.1
删除了已弃用的StorageMetadata.getDownloadUrl()和UploadTask.TaskSnapshot.getDownloadUrl()方法。要获取当前下载URL,请使用StorageReference.getDownloadUr()。
UploadTask.TaskSnapshot
有一个名为getMetadata()
的方法,它返回一个StorageMetadata
对象。
此StorageMetadata
对象包含名为getReference()
的方法,该方法返回StorageReference
个对象。
该StorageReference
对象包含getDownloadUrl()
方法,该方法现在返回Task对象而不是Uri对象。
然后必须听取此任务以获取Uri,这可以异步或以阻塞方式完成;请参阅Tasks API。
答案 1 :(得分:3)
f(g(x))
f(sin(x))
cos(sin(x))
答案 2 :(得分:2)
您现在将无法使用获取图像的下载网址
profileImageUrl = 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
// ...
}
}
});
答案 3 :(得分:0)
您应该尝试这个。了解并尝试在您的产品中实施
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());
}
}
});
}
}
});
答案 4 :(得分:0)
.getDownloadURL
不再可用且已弃用。
来自文档Task<Uri>
和getdownloadUrl();
异步检索具有可撤销令牌的长期下载URL。
参见documentation
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
while (!urlTask.isSuccessful());
Uri downloadUrl = urlTask.getResult();
//continue with your code
答案 5 :(得分:0)
已弃用getDownloadUrl方法。而是使用以下内容 taskSnapshot.getMetadata()。getReference()。getDownloadUrl()。toString()
答案 6 :(得分:0)
尝试
{
firebase.storage()
.child()
.getDownloadURL().then()
}