获取Firebase图片URL遇问题,返回com.google.android.gms.tasks.zzu@d55ef5求助
解决Firebase Storage获取图片下载URL返回对象地址的问题
你看到的com.google.android.gms.tasks.zzu@d55ef5并不是错误提示,而是Task<Uri>对象的默认字符串表示——因为getDownloadUrl()方法返回的是一个异步任务,不是直接的下载URL字符串,你直接调用toString()只会得到对象的内存地址,而非实际可用的URL。
问题根源
你的代码里这一行逻辑有误:
String urlPhoto = taskSnapshot.getMetadata().getReference().getDownloadUrl().toString();
getDownloadUrl()返回的是Task<Uri>类型,它是异步执行的,必须通过回调监听才能拿到最终的Uri结果,不能直接通过toString()获取值。
修改后的完整代码
你需要在上传成功的回调里,再给getDownloadUrl()添加一个成功监听来获取真实的下载URL,调整后的代码如下:
@Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK){ Uri uriImagen = data.getData(); storageReference = storage.getReference("chat_images");//El nombre de la carpeta en la que voy a guardar las imagenes final StorageReference photoReference = storageReference.child(uriImagen.getLastPathSegment()); //Obtenemos como un id de la imagen que la diferencia de todas las demás photoReference.putFile(uriImagen).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // 监听getDownloadUrl()的异步回调,获取真实URL taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { String urlPhoto = uri.toString(); Log.v("Url de la foto", urlPhoto); Message m = new Message(tvName.getText().toString() + " te ha enviado una foto", urlPhoto, tvName.getText().toString(), "", "2", "00:00"); databaseReference.push().setValue(m); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // 处理获取URL失败的场景,方便排查问题 Log.e("获取URL失败", e.getMessage()); } }); } }); } }
额外提示
- Firebase Storage的核心操作都是异步的,必须通过回调处理结果,不能同步直接取值
- 如果你的Firebase SDK版本较新,
getDownloadUrl()可能已被标记为过时,推荐直接调用StorageReference.getDownloadUrl(),逻辑和上面一致,依然需要监听回调 - 新增的失败监听可以帮你快速定位获取URL时可能出现的权限、网络等问题
内容的提问来源于stack exchange,提问作者JuFMM
相关产品推荐
相关产品推荐

