я не получаю uri изображения ….. изображение, хранящееся в firebase

#android #firebase-realtime-database

# #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. Добро пожаловать в StackOverflow! Пожалуйста, опишите вашу проблему в коротком абзаце и кратком изложении того, что вы пробовали раньше, в дополнение к предоставленному вами фрагменту кода.

Ответ №1:

Неясно, какой тип URI вам нужен, поэтому я включу обе версии.

URI хранилища Google

Это не очень полезно за пределами API-интерфейсов Google.

Это будет в следующем формате: gs://PROJECT_ID.appspot.com/path/to/file.png

Чтобы получить это значение, вы должны использовать следующий код:

 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
      }
    });
 

URL-адрес ресурса HTTPS

Этот URL-адрес будет использоваться, если вы хотите включить изображение на веб-страницу или ссылку на него в электронное письмо.

Это будет в следующем формате: https://firebasestorage.googleapis.com/v0/b/PROJECT_ID.appspot.com/o/path/to/file.png?alt=mediaamp;token=ACCESS_TOKEN

Поскольку этот URL-адрес использует токен доступа, выданный сервером, он должен быть запрошен и возвращен клиенту асинхронно. Это достигается с помощью следующего кода:

 Task<Uri> getDownloadUrlTask = storage.getReference('path/to/file.png').getDownloadUrl();
 

В коде вопроса вы бы использовали:

 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
      }
    });
 

Примечание: Если вам нужны как URL-адрес HTTPS, так и файл в виде массива байтов, их нужно будет запрашивать как отдельные задачи, используя оба getBytes() и getDownloadUrl() .

Смотрите также