我实施了一个应用程序,允许用户选择图像或用相机拍摄一个图像,一旦完成,将启动另一个活动,通过一些操作按钮向用户呈现图像。基本上我用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()结构来获取图像并传递它吗?我的手机非常糟糕,当应用程序崩溃时它不会将堆栈跟踪写入日志,因此我没有这些信息。抱歉。非常感谢提前。
答案 0 :(得分:0)
没有堆栈跟踪很难说,但如果它是一个空指针异常,则appInfo或imageViewPhoto必须为null。很可能在activity_send.xml中没有任何内容,id为imageViewPhoto。
如果它是类强制转换异常,则imageViewPhoto不是ImageView。
不确定那会有什么问题。我相信无效的uri只会清除图像。