java - 从firebase上传字符串方法返回图像URL
问题描述
您好,我正在尝试在图像上传后从 Firebase 存储中检索图像 URL,并将其显示在图像上传方法的 Toast 中,该方法会将 URL 作为字符串返回。
我能够获取 URL,但我的 toast 在图像上传完成之前运行,因此返回一个空字符串响应来代替 URL。
我想要实现的是获取图像URL,然后如果上传成功,则将其显示在Upload方法之外的toast中
这是我尝试过的;
insertImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(TestFirebaseImageUpload.this, firebaseImageUpload(filePath), Toast.LENGTH_SHORT).show();
}
});
单击 insertImage 按钮时,它会显示一个 toast,其中应包含通过将文件 uri 发送到 firebaseImageUploadMethod 获得的图像的 URL。
这是我的 firebaseImage 上传方法
public String firebaseImageUpload(Uri filePath) {
if (filePath != null) {
// Setting progressDialog Title.
progressDialog = new ProgressDialog(this);
progressDialog.setTitle(" Uploading...");
progressDialog.show();
ref = imagePath.child("images/" + UUID.randomUUID().toString());
ref.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(TestFirebaseImageUpload.this, "Uploaded ... ", Toast.LENGTH_SHORT).show();
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
URL = uri.toString();
}
});
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
URL = "";
Toast.makeText(TestFirebaseImageUpload.this, "Not Uploaded ... ", Toast.LENGTH_SHORT).show();
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
progressDialog.setMessage("Uploaded " + (int) progress + "%");
}
});
}
return URL;
}
我想要的是在单击 insertImage 按钮时显示的 toast 中显示 URL。
谢谢
解决方案
您可以设置回调
onClick(){
firebaseImageUpload(filePath, Callback)
}
onUploaded(){
// Display toast here
}
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
URL = uri.toString();
callback.onUploaded(URL);
}
});
interface Callback{
void onUploaded(String url)
}
推荐阅读
- asp.net-core - 如何为我的应用程序中的所有控制器设置 ProducesResponseType?
- ssl - 是否有定义的标头用于在双向 TLS 场景中将客户端证书传递到后端
- c++ - VimPlugin:在没有箭头的 Visual Studio 中滚动自动完成建议
- javascript - Moodle,如何添加自定义 jQuery 脚本以在所有页面上执行
- android - java.lang.NoSuchMethodError:没有使用 Facebook SDK 的静态方法 getAPIVersion()
- ios - 在 UITableview // Swift 4.2 中自动布局多行标签
- r - 如何使用 R 将列表分成多列
- php - New to Ubuntu cant upload images to directory for webpage through xampp worked fine on windows
- node.js - 如何为nodejs离线安装mssql模块
- php - 具有多态关系的 Laravel 评论系统