【发布时间】:2013-07-29 15:28:06
【问题描述】:
我正在尝试启动相机活动,然后在用户保存照片并返回应用时捕捉照片。这在运行 Android 2.2 的手机上运行良好,但在运行 4.1.2 或其他版本的平板电脑上出现 NullPointerException。
当我尝试用传递的“数据”制作位图时,我看到应用程序在“onActivityResult”中出现 NullPointerException(显然没有数据传递):
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
pauseTime = System.currentTimeMillis();
Log.i(TAG, "Camera result time pauseTime should be reset: " + pauseTime);
Log.i(TAG, "Camera resultCode is equal to: " + resultCode + " RESULT_OK is: " + RESULT_OK);
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
try {
Bitmap photo = (Bitmap) data.getExtras().get("data");
} catch (Exception e) {
// Data is null getting sent back
e.printStackTrace();
}
logcat 中的错误是这样的:
07-29 17:16:50.795: W/System.err(19517): java.lang.NullPointerException
07-29 17:16:50.795: W/System.err(19517): at com.android.thoughtfi.UsersThoughts.onActivityResult(UsersThoughts.java:163)
07-29 17:16:50.795: W/System.err(19517): at android.app.Activity.dispatchActivityResult(Activity.java:5391)
07-29 17:16:50.795: W/System.err(19517): at android.app.ActivityThread.deliverResults(ActivityThread.java:3215)
07-29 17:16:50.795: W/System.err(19517): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3262)
07-29 17:16:50.795: W/System.err(19517): at android.app.ActivityThread.access$1200(ActivityThread.java:140)
07-29 17:16:50.795: W/System.err(19517): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1286)
07-29 17:16:50.800: W/System.err(19517): at android.os.Handler.dispatchMessage(Handler.java:99)
07-29 17:16:50.800: W/System.err(19517): at android.os.Looper.loop(Looper.java:137)
07-29 17:16:50.800: W/System.err(19517): at android.app.ActivityThread.main(ActivityThread.java:4947)
07-29 17:16:50.800: W/System.err(19517): at java.lang.reflect.Method.invokeNative(Native Method)
为什么没有任何数据返回到应用程序的 onactivityresult?
编辑(更多信息,这里是照片按钮):
photoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// possible option
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mCapturedImageURI = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
startActivityForResult(intent, CAMERA_REQUEST);
}
});
编辑这似乎工作正常,但无论我如何在平板电脑上拍摄照片,我仍然会以横向模式显示照片:
onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
pauseTime = System.currentTimeMillis();
Log.i(TAG, "Camera result time pauseTime should be reset: " + pauseTime);
Log.i(TAG, "Camera resultCode is equal to: " + resultCode + " ");
Log.i(TAG, "The intent mCapturedImageURI was: " + mCapturedImageURI);
Bitmap photo = null;
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
if(data != null){
photo = (Bitmap) data.getExtras().get("data");
} else {
try {
photo = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mCapturedImageURI);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
imageView.setImageBitmap(photo);
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(mCapturedImageURI, projection, null,
null, null);
int column_index_data = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
capturedImageFilePath = cursor.getString(column_index_data);
照片按钮:
photoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// possible option
String fileName = "temp.jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
mCapturedImageURI = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
startActivityForResult(intent, CAMERA_REQUEST);
}
});
【问题讨论】:
-
UserThoughts.java 文件的第 163 行在哪里?
-
这里是抛出异常的地方:Bitmap photo = (Bitmap) data.getExtras().get("data");
-
由于您有 try catch 块,我看不出您显示的代码是如何导致应用程序崩溃的。你的问题是你为什么获得 NPE?
-
好吧,我添加了 try catch 块以防止代码崩溃并查看错误。该错误是由于 NullPointerException,是的。我不明白。我想我应该让问题标题更具体
-
Android 4.0 及更高版本对 Image 的处理方式不同。参考我的回答来解决这个问题stackoverflow.com/questions/17682604/…
标签: android