0

我有这个代码可以从画廊或相机中挑选图像:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case SELECT_PICTURE_ACTIVITY_REQUEST_CODE:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = data.getData();
                String[] filePathColumn = { MediaStore.Images.Media.DATA,
                        MediaStore.Images.Media.DISPLAY_NAME };
                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                if (cursor.moveToFirst()) {
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String filePath = cursor.getString(columnIndex);
                    ext = filePath
                            .substring(filePath.lastIndexOf(".") + 1);
                    photod = BitmapFactory.decodeFile(filePath);

                    new AsyncTaskOne().execute(new String[] {});
    (fileNameIndex);


                }
            }
            break;

        case SELECT_CAMERA_ACTIVITY_REQUEST_CODE:
            if (requestCode == CAMERA_REQUEST) {
                photod = (Bitmap) data.getExtras().get("data");
                new AsyncTaskOne().execute(new String[] {});
            }
        }
    }

当我按下确认按钮时,我调用了这个监听器

OnClickListener confirm = new OnClickListener() {
        public void onClick(View v) {
            Intent i = new Intent("com.striget.eu.UpdatePhoto");
            i.putExtra(PropertiesUpdatedPhoto.EXTRA_PHOTO, codedPhoto);
            i.putExtra(PropertiesUpdatedPhoto.EXTRA_EXT, ext);
            startActivity(i);
        }
    };

(其中codedPhoto是通过另一种方法以 base64 编码的图像)在另一个活动中发送图像及其扩展

小图像一切正常,但如果我选择中等大小的图像或大照片(如果不是很大),应用程序会冻结,屏幕变黑,如果我等待几分钟返回当前活动而不显示任何错误在堆栈中并且调用的意图PropertiesUpdatedPhoto没有启动。

我该如何解决这个问题?

4

1 回答 1

1

这个问题在这里讨论,我们应该尽量减少意图的额外内容。

我的建议是传递图像而不是传递图像,也许传递图像 URI 或路径会是更好的解决方案。然后只在该活动中加载图像。

例子 :

OnClickListener confirm = new OnClickListener() {
    public void onClick(View v) {
        Intent i = new Intent("com.striget.eu.UpdatePhoto");
        i.setData(PropertiesUpdatedPhoto.EXTRA_PHOTO, # Image URI Here # );
        // Or i.putExtra(PropertiesUpdatePhoto.EXTRA_PHOTO, # Image Path Here #);
        i.putExtra(PropertiesUpdatedPhoto.EXTRA_EXT, ext);
        startActivity(i);
    }
};
于 2012-07-29T17:13:58.103 回答