我没有收到图像uri .....存储在firebase中的图像

时间:2019-04-16 05:58:37

标签: android firebase-realtime-database

storageRef.child("users/me/profile.png").getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
Uri image=uri;
Toast.makeText(viewpgdetails.this, "image uri="+image , Toast.LENGTH_SHORT).show();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {

Toast.makeText(viewpgdetails.this, "failed to get image", Toast.LENGTH_SHORT).show();
                // Handle any errors
            }
        });
        // [END download_full_example]
    }

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您要使用哪种URI,因此我将同时包括这两个版本。

Google存储URI

这在Google API之外不是很有用。

这将采用以下格式:String storageUri = storage.getReference('path/to/file.png').toString();

要获取此值,您将使用以下代码:

StorageReference fileRef = storageRef.child("users/me/profile.png")
fileRef.getBytes(Long.MAX_VALUE)
    .addOnSuccessListener(new OnSuccessListener<byte[]>() {
      @Override
      public void onSuccess(byte[] bytes) {
        Toast.makeText(viewpgdetails.this, "image uri: " + fileRef.toString(), Toast.LENGTH_SHORT).show();

        // Use the bytes to display the image
      }
    })
    .addOnFailureListener(new OnFailureListener() {
      @Override
      public void onFailure(@NonNull Exception exception) {
        Toast.makeText(viewpgdetails.this, "failed to get image", Toast.LENGTH_SHORT).show();
        // Handle any errors
      }
    });

在问题的代码中,您将使用:

https://firebasestorage.googleapis.com/v0/b/PROJECT_ID.appspot.com/o/path%2Fto%2Ffile.png?alt=media&token=ACCESS_TOKEN

HTTPS资源URL

如果您要将图像包含在网页中或将其链接到电子邮件中,将使用此URL。

这将采用以下格式:Task<Uri> getDownloadUrlTask = storage.getReference('path/to/file.png').getDownloadUrl();

由于此URL使用服务器发出的访问令牌,因此必须请求它并异步返回给客户端。这可以通过以下代码实现:

StorageReference fileRef = storageRef.child("users/me/profile.png")
fileRef.getDownloadUrl()
    .addOnSuccessListener(new OnSuccessListener<Uri>() {
      @Override
      public void onSuccess(Uri downloadUrl) {
        Toast.makeText(viewpgdetails.this, "image url: " + downloadUrl, Toast.LENGTH_SHORT).show();

        // Use URL for internal web page, etc.
      }
    })
    .addOnFailureListener(new OnFailureListener() {
      @Override
      public void onFailure(@NonNull Exception exception) {
        Toast.makeText(viewpgdetails.this, "failed to get image url", Toast.LENGTH_SHORT).show();
        // Handle any errors
      }
    });

在问题的代码中,您将使用:

getBytes()

注意:如果您希望HTTPS URL和文件都作为字节数组,则必须同时使用getDownloadUrl()和{{1}}将它们作为单独的任务进行请求。

另请参见