#java #android #firebase #firebase-storage #picasso
#java #Android #firebase #firebase-хранилище #пикассо
Вопрос:
«Я пытаюсь загрузить фотографию профиля в firebase. но оно не извлекается в приложение. когда я загружаю фотографию, она работает. но не извлекает.как исправить эту проблему ?.»
«Здесь, когда пользователь выбирает изображение, здесь мы можем обрезать это изображение. а также здесь это изображение загружено в firebase. ‘
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Gallery amp;amp; resultCode == RESULT_OK amp;amp; data!= null){
Uri imageUri = data.getData();
// start picker to get image for cropping and then use the image in cropping activity
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1,1)
.start(this);
}
//crop image
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK){
progressDialog.setTitle("Set profile Image");
progressDialog.setMessage("Your profile image is updating..");
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
Uri resultUri = result.getUri();
final StorageReference filePath = profileImageReference.child(currentUserID ".jpg");//new profile image created
//upload image to firebase storage
filePath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()){
Toast.makeText(SettingsActivity.this, "Profile Image uploaded...", Toast.LENGTH_SHORT).show();
final String downloadUri = filePath.getDownloadUrl().toString();
rootReference.child("Users").child(currentUserID).child("image")
.setValue(downloadUri)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(SettingsActivity.this, "Image Saved", Toast.LENGTH_SHORT).show();
}
else {
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error: " message, Toast.LENGTH_SHORT).show();
}
progressDialog.dismiss();
}
});
}
else {
String message = task.getException().toString();
Toast.makeText(SettingsActivity.this, "Error: " message, Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
}
}
});
}
}
}
«В этой части извлекается информация о пользователе и файл изображения».
private void RetrieveUserInformation() {
rootReference.child("Users").child(currentUserID)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if ((snapshot.exists()) amp;amp; (snapshot.hasChild("name") amp;amp; (snapshot.hasChild("image")))){
String retrieveUserName = snapshot.child("name").getValue().toString();
String retrieveDescription = snapshot.child("description").getValue().toString();
String retrieveProfileImage = (String) snapshot.child("image").getValue();
userName.setText(retrieveUserName);
description.setText(retrieveDescription);
Picasso.get().load(retrieveProfileImage).into(profileImage);
}
else if ((snapshot.exists()) amp;amp; (snapshot.hasChild("name"))){
String retrieveUserName = snapshot.child("name").getValue().toString();
String retrieveDescription = snapshot.child("description").getValue().toString();
userName.setText(retrieveUserName);
description.setText(retrieveDescription);
}
else{
Toast.makeText(SettingsActivity.this, "Please, Update your information...", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
Комментарии:
1. Прежде всего, прекратите игнорировать ошибки. Используйте
Log.d(TAG, databaseError.getMessage());
. Вы получаете что-то распечатанное в logcat? Пожалуйста, добавьте свою структуру базы данных в виде файла JSON или, по крайней мере, скриншота.
Ответ №1:
Я не знаком с Picasso, но Glide. Поэтому я просто напишу теорию поверх нее. Давайте продолжим.
Проблема может быть вызвана тем, что хранилище Firebase отклоняет такой запрос, поскольку, вероятно, к такому запросу через Picasso не прикреплен заголовок аутентификации пользователя. Чтобы проверить это, временно включите общедоступный доступ для чтения к вашему хранилищу Firebase.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow write: if request.auth != null;
allow read: if true;
}
}
}
Если это так, ваше изображение будет отображено.
Комментарии:
1. спасибо за ваш ответ @WeiChan . я проверю это.
2. я проверяю это. но это не проблема для этого. в firebase все правильно. я думаю, что ошибка возникает на стороне кодирования.