我试图捕捉,并通过Android模拟器保存的图像,图像被捕获,但在保存文件已损坏。
可能是什么造成的? 谁能帮我找出可能的错误点?
下面是我的代码:
**public void onCreate**(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
**Intent** intent = new **Intent**("android.media.action.IMAGE_CAPTURE");
try {
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
intent.putExtra(**MediaStore**.EXTRA_OUTPUT, fileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
@Override
**protected void onActivityResult**(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
StoreImage(this, data.getData(),
mediaFile);
finish();
}
else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
}
else {
finish();
try {
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
堆栈跟踪低于::
04-05 23:55:40.369: E/AndroidRuntime(534): FATAL EXCEPTION: main
04-05 23:55:40.369: E/AndroidRuntime(534): java.lang.RuntimeException: Unable to start activity ComponentInfo{camera.android/camera.android.CameraActivity}: java.lang.NullPointerException: file
04-05 23:55:40.369: E/AndroidRuntime(534): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
04-05 23:55:40.369: E/AndroidRuntime(534): Caused by: java.lang.NullPointerException: file
04-05 23:55:40.369: E/AndroidRuntime(534): at android.net.Uri.fromFile(Uri.java:441)
04-05 23:55:40.369: E/AndroidRuntime(534): at camera.android.CameraActivity.getOutputMediaFileUri(CameraActivity.java:72)
04-05 23:55:40.369: E/AndroidRuntime(534): at camera.android.CameraActivity.onCreate(CameraActivity.java:34)
04-05 23:55:40.369: E/AndroidRuntime(534): at android.app.Activity.performCreate(Activity.java:4465)
04-05 23:55:40.369: E/AndroidRuntime(534): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
04-05 23:55:40.369: E/AndroidRuntime(534): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
检查您是否在清单文件中添加以下权限::
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
也是在
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
我想你一定附上您要保存太文件名,只给路径是不够的....
交换这条线,
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
至
if (resultCode == RESULT_OK) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
首先检查孩子的活动是否成功或者没有做的工作。
“@阿加瓦尔:在调用onActivityResult”
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
StoreImage(this, data.getData(), mediaFile);
finish();
} else if (resultCode == RESULT_CANCELED) {
// User cancelled the image capture
} else {
finish();
try {
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
“如果结果是被创建并保存为JPEG格式的成功,然后从实习生数据存储N文件”
public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
Bitmap bm = null;
try {
bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
FileOutputStream out = new FileOutputStream(imageDir);
bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
bm.recycle();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
试试下面的代码,
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file=getOutputMediaFile(1);
picUri = Uri.fromFile(file); // create
i.putExtra(MediaStore.EXTRA_OUTPUT,picUri); // set the image file
startActivityForResult(i, CAPTURE_IMAGE);
其中getOutputMediaFile(INT)将是,
/** Create a File for saving an image */
private File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "MyApplication");
/**Create the storage directory if it does not exist*/
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
return null;
}
}
/**Create a media file name*/
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == 1){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".png");
} else {
return null;
}
return mediaFile;
}
最后,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Intent i;
switch (requestCode) {
case CAPTURE_IMAGE:
//THIS IS YOUR Uri
Uri uri=picUri;
break;
}
}
}
干杯....:)
文章来源: Getting Null pointer exception while capturing and saving an image using android emulator