Не извлекается изображение профиля из базы данных firebase

#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 все правильно. я думаю, что ошибка возникает на стороне кодирования.