拍照问题“onActivityResult”的解决方法

3

我在相机方面遇到了问题,很多情况下无法拍摄照片并将其显示在ImageView中,会出现错误。

java.lang.RuntimeException: Unable to resume activity {co.com.xxxx.xxxx/xxxx.xxxx.screens.formularioScreen}:
 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent
 { act=inline-data (has extras) }} to activity {xxxx.xxxx,screens/xxxx.xxxx.screens.formularioScreen}:
 java.lang.NullPointerException

我的拍照代码如下:

    Button oButton = new Button(this);
    oButton.setText("take Photo");
    oButton.setOnClickListener(new OnClickListener() {              
        public void onClick(View v) {

            oImageActual = oView; //variable final = ImageView
            Intent intent =  new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, TAKE_PICTURE);
        }                       
    });

//layout = container
layout.addView(oButton);

我有一个名为onActivityResult的方法

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == TAKE_PICTURE) {          
        if (data != null) {             
            if (data.hasExtra("data")) {
                oImageActual.setImageBitmap((Bitmap) data.getParcelableExtra("data"));
            }               
        }
    }
}

我不确定是否缺少了一些try/catch之类的东西,但是错误经常发生。

有什么想法吗?


错误仍然出现,有时不会出现,有时会出现。
尝试按照oneilse14所说的放置它。

oImageActual.setImageBitmap((Bitmap) data.getExtras().get("data"));

但是错误仍然存在。有人知道为什么会发生这种情况或者如何防止它?


使用按钮启动相机

oButton.setText("Take photo");
oButton.setOnClickListener(new OnClickListener() {              
    public void onClick(View v) {       
        oImageActual = oView; //oImageActual ImageView is a final variable = new ImageVew(this);
        Intent intent =  new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                           
        startActivityForResult(intent, TAKE_PICTURE);
    }                       
});
LinAyout.addView(oButton);

这是onActivityResult。

/**
 * Al terminar la actividad de la camara, se ejecuta este metodo para continuar
 */
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);      
    if (requestCode == TAKE_PICTURE && (resultCode == Activity.RESULT_OK)) {            
        if (data != null) {         
            if (data.hasExtra("data")) {                
                oImageActual.setImageBitmap((Bitmap) data.getParcelableExtra("data"));
            }   
        }
    }
}
2个回答

1

在调用startActivityForResult(intent, TAKE_PICTURE);之后,您的Activity会进入后台。当您的设备需要更多资源来运行CameraActivity时,您的非活动状态的Activity可能会被杀死。因此,如果您在Activity进入后台之前在其中初始化了一些变量,则应该准备好它们在Activity返回前台后不会再次初始化。


我会在调用拍照活动时放置我的方法。 - JulioStyle88
我的问题与相机的使用无关,但这个答案帮助我解决了它。 - Dave

0

不要调用getParcelableExtra(),尝试使用

oImageActual.setImageBitmap((Bitmap) data.getExtras().get("data"));

问题仍然存在,我无法修复它,而不是发生。我知道的是,我有另一个活动,其中有一个相机按钮和3个单选按钮,如果在那里运行正常,那么返回到我的应用程序,在那里问题仍然存在,并且可以毫无问题地拍照。 - JulioStyle88

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接