#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()
.