【问题标题】:Not able to upload images to Firebase Cloud Storage无法将图片上传到 Firebase Cloud Storage
【发布时间】:2020-04-16 19:18:39
【问题描述】:

我正在尝试将图像上传到 Firebase Cloud Storage。但每当我去选择一张图像时,我都要裁剪活动,然后我就回到上一个活动。我拥有所有的读写权限,但仍然无法上传图片。

而且它还说这条线总是错误的

if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)

我的代码

Profile_beta.java

  public class Profile_beta extends AppCompatActivity {

    CircleImageView image_profile;
    TextView username;
    MaterialButton uploadButon;

    DatabaseReference reference;
    FirebaseUser fuser;
    StorageReference storageReference;

    private static final int PICK_IMAGE_REQUEST = 1;
    private  int Storage_Permission_Req=1;
    private StorageTask uploadTask;

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

        image_profile =findViewById(R.id.profile_image);
        username = findViewById(R.id.username);


        storageReference = FirebaseStorage.getInstance().getReference("uploads");

        //fuser = FirebaseAuth.getInstance().getCurrentUser();
        //reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());

        image_profile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (ContextCompat.checkSelfPermission(Profile_beta.this,
                        Manifest.permission.READ_EXTERNAL_STORAGE)== PackageManager.PERMISSION_GRANTED){
                    openFileChooser();
                }
                else{
                    requestStoragePermission();
                }
            }
        });
    }

    private void openFileChooser() {

        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, PICK_IMAGE_REQUEST);

    }

    private void requestStoragePermission() {
        ActivityCompat.requestPermissions(Profile_beta.this,new String[]
                {Manifest.permission.READ_EXTERNAL_STORAGE},Storage_Permission_Req);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if(requestCode==Storage_Permission_Req){
            if (grantResults.length>0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(Profile_beta.this,"Permission Granted",Toast.LENGTH_SHORT).show();
                openFileChooser();
            }
            else {
                Toast.makeText(Profile_beta.this,"Permission Not Granted",Toast.LENGTH_SHORT).show();
            }

        }
    }

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

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
                && data != null ) {
            Uri ImageUri = data.getData();

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

            if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {

                CropImage.ActivityResult result = CropImage.getActivityResult(data);

                if (resultCode == RESULT_OK) {
                    Uri resultUri = result.getUri();

                    String fuser;
                    fuser = FirebaseAuth.getInstance().getCurrentUser().getUid();
                    reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser);

                    StorageReference filepath=storageReference.child(fuser+".jpg");
                    image_profile.setImageURI(resultUri);

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

                        }
                    });

                } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                    Exception error = result.getError();
                }

            }



        }
    }
}

【问题讨论】:

  • if-else 子句不正确。
  • @KasımÖzdemir 我从 OnActivity Result 中删除了以下语句,但现在我一直循环播放作物活动,但如果 (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null ) { }
  • 不要删除语句。像我的答案一样使用。

标签: java android firebase firebase-storage


【解决方案1】:

你应该这样使用:

if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
            && data != null ) {
        Uri ImageUri = data.getData();

        CropImage.activity(ImageUri)
                .setGuidelines(CropImageView.Guidelines.ON)
                .setAspectRatio(1,1)
                .start(this);
}else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                Uri resultUri = result.getUri();

                //.....

            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
               //...
            }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2018-06-14
    • 2019-04-08
    • 2020-04-08
    • 2015-02-21
    • 1970-01-01
    • 2020-07-26
    • 2016-11-28
    相关资源
    最近更新 更多