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
我正在开发相机应用程序,它会拍摄一张照片并将其作为位图传递给另一个 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