0

This is my code for updating profile image to firebase but it keeps showing something went wrong and never updates the profile pic because after fetching image from external storage or camera it dosent update

private void uploadImage(){
                final ProgressDialog progressDialog =new ProgressDialog(this);
                progressDialog.setMessage("Uploading");
                progressDialog.show();
                if (mImageUri!=null){
                    final StorageReference filereference=storageReference.child(System.currentTimeMillis()+"."+getFileExtension(mImageUri));
                    uploadTask=filereference.putFile(mImageUri);
                    uploadTask.continueWithTask((Continuation) task -> {
                        if (!task.isSuccessful()){
                            throw task.getException();
                        }
                        return filereference.getDownloadUrl();
                    }).addOnCompleteListener((OnCompleteListener<Uri>) task -> {
                        if (task.isSuccessful()){
                            Uri downloadUri=task.getResult();
                            String myurl=downloadUri.toString();

                            DatabaseReference reference=FirebaseDatabase.getInstance().getReference("users").child(firebaseUser.getUid());
                            HashMap<String,Object> hashMap=new HashMap<>();
                            hashMap.put("imageurl",""+myurl);
                            reference.updateChildren(hashMap);
                            progressDialog.dismiss();
                        }else {
                            snackbar= Snackbar.make(view," failed",Snackbar.LENGTH_LONG);
                            setSnackbar();
                        }

                    }).addOnFailureListener(e -> {
                        snackbar= Snackbar.make(view,e.getMessage(),Snackbar.LENGTH_LONG);
                        setSnackbar();
                    });

                }
                else {
                    snackbar= Snackbar.make(view,"no Image selected",Snackbar.LENGTH_LONG);
                    setSnackbar();
                }
            }

Here is how I am asking for user's external storage permission

 public boolean checkPermissionREAD_EXTERNAL_STORAGE(
        final Context context) {
    int currentAPIVersion = Build.VERSION.SDK_INT;
    if (currentAPIVersion >= android.os.Build.VERSION_CODES.M) {
        if (ContextCompat.checkSelfPermission(context,
                Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            if (ActivityCompat.shouldShowRequestPermissionRationale((EditProfileActivity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) {
                showDialog("External storage", context,
                        Manifest.permission.READ_EXTERNAL_STORAGE);

            } else {
                ActivityCompat
                        .requestPermissions(
                                (EditProfileActivity) context,
                                new String[] { Manifest.permission.READ_EXTERNAL_STORAGE },
                                MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
            }
            return false;
        } else {
            return true;
        }

    } else {
        return true;
    }
}
public void showDialog(final String msg, final Context context,
                       final String permission) {
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context);
    alertBuilder.setCancelable(true);
    alertBuilder.setTitle("Permission necessary");
    alertBuilder.setMessage(msg + " permission is necessary");
    alertBuilder.setPositiveButton(android.R.string.yes,
            (dialog, which) -> ActivityCompat.requestPermissions((EditProfileActivity) context,
                    new String[] { permission },
                    MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE));
    AlertDialog alert = alertBuilder.create();
    alert.show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // do your stuff



            } else {
                Toast.makeText(EditProfileActivity.this, "GET_ACCOUNTS Denied",
                        Toast.LENGTH_SHORT).show();
            }
            break;
        default:
            super.onRequestPermissionsResult(requestCode, permissions,
                    grantResults);
    }
}

This is how Activity Result operates and here is where it is displaying something went wrong.

 @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE && resultCode==RESULT_OK ) {
        // do your stuff..

        CropImage.ActivityResult result=CropImage.getActivityResult(data);
        mImageUri = result.getUri();
        uploadImage();

    }else {
        snackbar= Snackbar.make(view,"Something gone wrong",Snackbar.LENGTH_LONG);
        setSnackbar();
    }
}
akash sharma
  • 13
  • 1
  • 4

0 Answers0