Android 在平板电脑上使用应用程序时不显示图像
我正在尝试启动一个摄像头活动,然后在用户保存照片并返回应用程序时捕获照片。这在我运行安卓2.2的手机上运行得很好,但在运行4.1.2的平板电脑上出现了NullPointerException 我看到应用程序在“onActivityResult”中得到一个NullPointerException,当我试图用传递的“数据”制作位图时(显然没有传递任何数据): logcat中的错误如下所示:Android 在平板电脑上使用应用程序时不显示图像,android,Android,我正在尝试启动一个摄像头活动,然后在用户保存照片并返回应用程序时捕获照片。这在我运行安卓2.2的手机上运行得很好,但在运行4.1.2的平板电脑上出现了NullPointerException 我看到应用程序在“onActivityResult”中得到一个NullPointerException,当我试图用传递的“数据”制作位图时(显然没有传递任何数据): logcat中的错误如下所示: 07-29 17:16:50.795: W/System.err(19517): java.lang.Null
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
编辑(有关其他信息,请参见照片按钮):
“编辑”功能似乎正常,但无论我如何在平板电脑上拍摄照片,我仍会以横向模式显示照片:
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);
}
});
对于相机,文档状态为返回包含捕获图片的文件的路径
相关代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "Image saved to: " + data.getData(), Toast.LENGTH_LONG).show();
} else {
// whatever
}
}
编辑:来自
标准意图动作,可发送至摄像头应用程序
捕获图像并返回它
调用者可以传递额外的_输出来控制此图像的位置
我会写的。如果不存在额外的_输出,则会出现一个小的
大小图像作为位图对象返回到额外字段中。这是
适用于只需要小图像的应用程序。如果
如果存在额外的_输出,则将写入完整大小的图像
额外_输出的Uri值
如果我理解了这一点,相机活动将返回:
- 如果指定了额外的输出,则完整映像的Uri
- 或未指定额外输出时getExtras()中的缩略图。获取(“数据”)
您是否在启动相机的意图中指定了额外的_输出参数?UsersThoughts.java文件的第163行在哪里?引发异常的地方:Bitmap photo=(Bitmap)data.getExtras().get(“data”);由于您有try-catch块,我看不出您显示的代码是如何导致应用程序崩溃的。你的问题是为什么要得到NPE?我添加了try-catch块以防止代码崩溃并看到错误。错误是由于NullPointerException引起的,是的。我不明白。我想我应该让问题标题更具体一些安卓4.0及以上版本对图像有不同的处理。参考我的答案来解决这个问题不,我没有具体说明。也许在以后的版本中,缩略图不会自动返回,所以应该使用额外的_输出。我也会这样尝试,看看它是如何工作的。实际上,我的意图中有额外的_输出参数。谢谢你的帮助,这得到了一个漂亮的答案
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);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Toast.makeText(this, "Image saved to: " + data.getData(), Toast.LENGTH_LONG).show();
} else {
// whatever
}
}