【问题标题】:Image-Crop-Activity doesn't send Image-Uri to receiving Activity (Android-Image-Cropper)Image-Crop-Activity 不会将 Image-Uri 发送到接收 Activity (Android-Image-Cropper)
【发布时间】:2016-11-15 23:25:49
【问题描述】:

我正在尝试裁剪image(我从图库中选择或从我的相机中拍摄)并将其传递给另一个activity,后者应该将image 上传到我的firebase 存储。

起初(没有裁剪图像)一切都很顺利。我能够通过并上传image...但是在将图像裁剪代码添加到我的onActivityResult 之后,它只是在按下“裁剪”后关闭了 imageCropActivity 并跳回了我的 MainActivity。

我试过了,但我真的不知道为什么会这样。也许我错过了一些东西。有任何想法吗?

对于图像裁剪,我正在使用这个库:https://github.com/ArthurHub/Android-Image-Cropper

主要活动

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

        mImageUri_gallery = data.getData();
        mImageUri_camera = data.getData();


        if (requestCode == 100 && resultCode == RESULT_OK) {
            CropImage.activity(mImageUri_gallery)
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .start(this);
            if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
                CropImage.ActivityResult result = CropImage.getActivityResult(data);
                if (resultCode == RESULT_OK) {
                    Uri resultUriGallery = result.getUri();
                    Intent intentGallery = new Intent(MainActivity.this, ImagePostActivity.class);
                    intentGallery.putExtra("image-uri", resultUriGallery.toString());
                    startActivity(intentGallery);
                } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                    Exception error = result.getError();
                }
            }

        } else if (resultCode != RESULT_CANCELED && data != null) {
            if (requestCode == 200 && resultCode == RESULT_OK) {
                CropImage.activity(mImageUri_camera)
                        .setGuidelines(CropImageView.Guidelines.ON)
                        .start(this);
                if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
                    CropImage.ActivityResult result = CropImage.getActivityResult(data);
                    if (resultCode == RESULT_OK) {
                        Uri resultUriCamera = result.getUri();
                        Intent intentCamera = new Intent(MainActivity.this, ImagePostActivity.class);
                        intentCamera.putExtra("image-uri", resultUriCamera.toString());
                        startActivity(intentCamera);
                    } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                        Exception error = result.getError();
                    }
                }

            }
        }


    }

ImagePostActivity

public class ImagePostActivity extends AppCompatActivity {

    public static TextView txt_btn_post;
    public static EditText mPostTitle;
    public static ImageView imagePostPreview;
    private StorageReference mStorage;
    private DatabaseReference mDatabase;
    private ProgressDialog mProgress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_post);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        mStorage = FirebaseStorage.getInstance().getReference();
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Test_Stream_Uploads");
        mProgress = new ProgressDialog(this);
//        mPostTitle = (EditText) findViewById(R.id.mPostTitle);
        imagePostPreview = (ImageView) findViewById(R.id.imagePostPreview);
        Intent intent = getIntent();

        mImageUri_gallery = Uri.parse(intent.getStringExtra("image-uri"));
        imagePostPreview.setImageURI(mImageUri_gallery);
        mImageUri_camera = Uri.parse(intent.getStringExtra("image-uri"));
        imagePostPreview.setImageURI(mImageUri_camera);

        txt_btn_post = (TextView) findViewById(R.id.txt_btn_post);
        txt_btn_post.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startPosting();
            }
        });


    }

    private void startPosting() {

        mProgress.setMessage("Bild wird hochgeladen...");
        mProgress.show();
        if (mImageUri_gallery != null) {
            StorageReference filepath = mStorage.child("Stream_Image").child(mImageUri_gallery.getLastPathSegment());
            filepath.putFile(mImageUri_gallery).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    Uri downloadUrl = taskSnapshot.getDownloadUrl();
                    Intent intent = new Intent(getBaseContext(), MainActivity.class);
                    DatabaseReference newPost = mDatabase.push();
                    newPost.child("image").setValue(downloadUrl.toString());
                    mProgress.dismiss();
                    startActivity(intent);
                }
            });
        }


    }
}

【问题讨论】:

    标签: android image android-imageview onactivityresult firebase-storage


    【解决方案1】:

    我也在积极使用此工具,实际上我并没有真正了解您的代码,但我可以为您提供一个示例,说明它是如何为我工作的。如果你研究它,你可以很容易地理解并理解这个想法。它适用于您从图库中获取的图像。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == GALLERY_REQUEST && resultCode == RESULT_OK){
            Uri imageUri = data.getData();
            CropImage.activity(imageUri)
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(144,81)
                    .start(this);
        }
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                Uri resultUri = result.getUri();
                ib_image.setImageURI(resultUri);
            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
                Exception error = result.getError();
            }
        }
    }
    

    如果您想将此应用到您刚从相机拍摄的图像,您需要创建自己的 uri,这有点长,但在 Android 文档中有说明:(https://developer.android.com/training/camera/photobasics.html#TaskPhotoView),我'已经在这里的讨论中解释过:Image capture with camera & upload to Firebase (Uri in onActivityResult() is null)

    【讨论】:

    • 谢谢!我会尝试一下,如果它对我有用,请告诉你
    猜你喜欢
    • 2018-01-29
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多