首页 > 解决方案 > 无法在 FirebaseStorage 上上传图片

问题描述

我无法在 Firebase 存储上上传个人资料图片。我正在从吐司中打印错误。为什么会这样?我无法解决问题,我多次查看我的代码。可能是什么问题,我该如何调整我的代码以使其正常工作?提前感谢大家。

public class ProfiloUtenteActivity extends AppCompatActivity {

    private ImageView mImageBtn;
    private ImageView mSettingsBtn, mPersonalReviewsBtn, mShowFriendsBtn;
    private CircleImageView mProfileImage;
    private TextView mMailAcc, mUsernameAcc;

    private static final int GALLERY_PICK = 1;

    private DatabaseReference mUserDatabase;
    private FirebaseUser mCurrentUser;
    private ProgressDialog mProgress;

    private StorageReference mImageStorage;
    private String myUri = "";
    private Uri imageUri;

    FirebaseAuth auth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profilo_utente);

        mShowFriendsBtn = findViewById(R.id.imageShowFriends);
        mPersonalReviewsBtn = findViewById(R.id.imagePersonalReviews);
        mSettingsBtn = (ImageView) findViewById(R.id.imageViewSettings);
        mImageBtn = (ImageView) findViewById(R.id.change_image_btn);
        mProfileImage = (CircleImageView) findViewById(R.id.profile_image);
        mMailAcc = (TextView) findViewById(R.id.textViewMailAcc);
        mUsernameAcc = (TextView) findViewById(R.id.textView7);

        auth = FirebaseAuth.getInstance();

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        String current_uid = mCurrentUser.getUid();

        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("utenti").child(current_uid);
        mImageStorage = FirebaseStorage.getInstance().getReference();

mImageBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent galleryIntent = new Intent();
                galleryIntent.setType("image/*");
                galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(galleryIntent, "Seleziona una foto"), GALLERY_PICK);

            }
        });


@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == GALLERY_PICK && resultCode == RESULT_OK) {
            imageUri = data.getData();

            CropImage.activity()
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(1, 1)
                    .start(this);

        }

        if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            Uri resultUri = result.getUri();

                StorageReference filepath = mImageStorage.child("profile_images").child("1wq");

                filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                        if(task.isSuccessful()) {
                            Toast.makeText(ProfiloUtenteActivity.this, "Funziona", Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(ProfiloUtenteActivity.this, "Error", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
            
        }
    } 
} 

标签: javaandroidfirebasefirebase-realtime-databasefirebase-storage

解决方案


当一个Task失败时,它包含一个异常,其中包含有关失败的更多信息。日志记录可让您找出问题的原因:

public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
    if(task.isSuccessful()) {
        Toast.makeText(ProfiloUtenteActivity.this, "Funziona", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(ProfiloUtenteActivity.this, "Error", Toast.LENGTH_SHORT).show();
        Log.e("Upload", "Upload failed", task.getException());
    }
}

收到错误消息后,我建议您搜索它,可能有人以前处理过它。


推荐阅读