使用Uri将图像传递给活动会使应用程序崩溃

时间:2014-05-24 00:02:32

标签: android image android-intent imageview uri

我实施了一个应用程序,允许用户选择图像或用相机拍摄一个图像,一旦完成,将启动另一个活动,通过一些操作按钮向用户呈现图像。基本上我用Uri传递图像,在主要活动中,我有:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK)

            return;
        switch (requestCode) {
        case PHOTO_PICKED_WITH_DATA:
            // I think both cases here should start a new ac to compose a description and  then 
            // do an upload
            Uri uri = data.getData();
            appInfo = AppInfo.getInstance();
            appInfo.uri = uri;
            Log.i("MainActivity", "ready to start send activity");
            Intent intent = new Intent(this, SendActivity.class);
            startActivity(intent);

            break;
        case CAMERA_WITH_DATA:
            Uri uri_camera = data.getData();
            appInfo = AppInfo.getInstance();
            appInfo.uri = uri_camera;
            Log.i("MainActivity", "ready to start send activity");
            Intent intent_camera = new Intent(this, SendActivity.class);
            startActivity(intent_camera);

            break;
        }
    }

因此,当获得图片时,我们将回到onActivityResult()。我从传入的意图中提取uri,并将其存储在名为AppInfo的单例类中,该类在应用程序中共享,因此所有活动都可以访问它。然后在我的第二个活动中:

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

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
            .add(R.id.container, new PlaceholderFragment()).commit();
        }

        Log.i(LOG_TAG, "send activity created");
        ImageView imageViewPhoto = (ImageView) findViewById(R.id.imageViewPhoto);
        appInfo = AppInfo.getInstance();
        imageViewPhoto.setImageURI(appInfo.uri);

    }

所以我得到了uri并用它来设置图像视图。但该应用程序在"发送活动创建"后崩溃。评论最后三行解决了这个问题。所以我想知道是因为我不能以这种方式传递图像?如果没有,我如何以最小的变化做到这一点?我的意思是我仍然可以使用onActivityResult()结构来获取图像并传递它吗?我的手机非常糟糕,当应用程序崩溃时它不会将堆栈跟踪写入日志,因此我没有这些信息。抱歉。非常感谢提前。

1 个答案:

答案 0 :(得分:0)

没有堆栈跟踪很难说,但如果它是一个空指针异常,则appInfo或imageViewPhoto必须为null。很可能在activity_send.xml中没有任何内容,id为imageViewPhoto。

如果它是类强制转换异常,则imageViewPhoto不是ImageView。

不确定那会有什么问题。我相信无效的uri只会清除图像。