Androidjava.lang.NullPointerException求解?

Android java.lang.NullPointerException solving?

我正在开发相机应用程序,它会拍摄一张照片并将其作为位图传递给另一个 activity。

但问题是当我按下 "onKeyDown (BACK)" 按钮时出现 java.lang.NullPointerException 错误,并且 logcat 指向此代码:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        Intent mIntent = new Intent(this, SecondActivity.class);
       >>> Bitmap photo = (Bitmap) data.getExtras().get("data"); <<<
        mIntent.putExtra("data", photo);
        startActivityForResult(mIntent, 0);
}

如何解决这个问题?每次当我按下后退按钮并想转到主 activity 时,应用程序已停止并出现以下异常:

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'android.os.Bundle android.content.Intent.getExtras()'

 public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == event.KEYCODE_BACK);
        Intent intent = new Intent(this, FirstActivity.class);
        return super.onKeyDown(keyCode, event);
    }

您需要检查您的 onActivityResult

if (resultcode == RESULT_OK ){
your code
}

if(data!=null){
your code
}

或者对两者都使用 and 运算符(&&)

处理数据之前。

这里的事情是,当你启动 ActivityForResult 拍照时,你应该像这样添加额外的意图:

                File file = new File(Environment
                                .getExternalStorageDirectory(), "temp.jpg");
                outputImageUri = Uri.fromFile(file);
                Intent intent = new Intent(
                                MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, outputImageUri);
                        startActivityForResult(intent, TAKE_PICTURE);

然后你应该检查数据是否为空

               // Check if the result includes a thumbnail Bitmap
                if (data != null) {
                    if (data.hasExtra("data")) {
                        Bitmap thumbnail = data.getParcelableExtra("data");
                        imageView.setImageBitmap(thumbnail);
                    }
                } else {
                    // If there is no thumbnail image data, the image
                    // will have been stored in the target output URI.
                    Bitmap bitmap = BitmapFactory.decodeFile(
                            outputImageUri.getPath(), factoryOptions);
                    imageView.setImageBitmap(bitmap);
                }

因为数据可以为空

onKeyDown错误:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == event.KEYCODE_BACK); // Semicolon here, ends the "if"
    Intent intent = new Intent(this, FirstActivity.class);
    // The intent has no extra "data"
    // The intent is never used to set the result
    return super.onKeyDown(keyCode, event); // Overwrites the result
}

应该是这样的:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == event.KEYCODE_BACK) {
        Intent intent = new Intent(this, FirstActivity.class);
        intent.putExtra("data", theBitmap);
        setResult(RESULT_OK, intent);
        // Avoid "super.onKeyDown" so it won't overwrite the result
        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

注意:为了更好的用户体验,这实际上应该在 onKeyUp

中完成

您还应该检查 onActivityResult

中的 resultCode