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 などが欠けている場合ではありませんが、エラーが頻繁に発生します。

何か案は?


エラーは引き続き表示されますが、表示されない場合とそうでない場合があります。
置いてみてください。

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"));
            }   
        }
    }
}
4

2 に答える 2

1

startActivityForResult(intent, TAKE_PICTURE);アクティビティを呼び出した後、バックグラウンドに移動します。デバイスが CameraActivity 用により多くのリソースを必要とする場合、非アクティブなアクティビティを強制終了できます。したがって、バックグラウンドに移行する前にアクティビティ内に初期化された変数がいくつかある場合は、アクティビティがフォアグラウンドに戻った後に変数が初期化されないように準備する必要があります。

于 2012-04-27T13:58:38.663 に答える
0

getParcelableExtra()を呼び出す代わりに、

oImageActual.setImageBitmap((Bitmap) data.getExtras().get("data"));
于 2012-04-25T18:19:45.270 に答える