【发布时间】:2016-01-09 21:19:21
【问题描述】:
这是在 StackOverflow 上看到的非常常见的问题,我已经尝试了几乎所有关于 SO 的解决方案。我仍然在onAtivityResult- data 中获得NullPointerExeption。
我试过了:
http://developer.android.com/training/camera/photobasics.html
how to pass captured/gallery image to next activity in android
android camera: onActivityResult() intent is null if it had extras
我第四次尝试的最后一个代码如下:
点击按钮:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file=getOutputMediaFile(1);
picUri = Uri.fromFile(file); // create
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, picUri); // set the image file
startActivityForResult(cameraIntent, REQUEST_TAKE_PHOTO);
getOutputMediaFile()
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;
}
}
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;
}
onActivityResult()
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK && requestCode == REQUEST_TAKE_PHOTO && intent != null){
Uri selectedImage = intent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
//file path of captured image
imagepath = cursor.getString(columnIndex);
//file path of captured image
File f = new File(imagepath);
String filename = f.getName();
cursor.close();
Bitmap imageData = BitmapFactory.decodeFile(filename);
// Bitmap imageData = (Bitmap) data.getExtras().get("data");
Intent i = new Intent(this, EditImageActivity.class);
i.putExtra("path", imageData );
startActivity(i);
}
}
}
请建议一些更好的东西,这些在我已经提到的链接中没有提到,因为这对我不起作用。
我正在使用带有 api 10+ 的 Android Atudio。
崩溃日志:
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: FATAL EXCEPTION: main
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: Process: com.example.dell.drawdemo, PID: 25060
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.dell.drawdemo/com.example.dell.drawdemo.MainActivity}: java.lang.NullPointerException
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3593)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3636)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:151)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:110)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.os.Looper.loop(Looper.java:193)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5334)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:515)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:676)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: Caused by: java.lang.NullPointerException
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at com.example.dell.drawdemo.MainActivity.onActivityResult(MainActivity.java:131)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.Activity.dispatchActivityResult(Activity.java:5546)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3589)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3636)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:151)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:110)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.os.Looper.loop(Looper.java:193)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5334)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:515)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:676)
10-12 17:48:49.934 25060-25060/com.example.dell.drawdemo E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
10-12 17:20:27.534 17724-17724/com.example.dell.drawdemo E/AndroidRuntime: java.lang.RuntimeException: 传递结果失败 ResultInfo{who=null, request=1, result=-1, data=null} 到活动 {com.example.dell.drawdemo/com.example.dell.drawdemo.MainActivity}:java.lang.NullPointerException
-
10-12 17:20:27.534 17724-17724/com.example.dell.drawdemo E/AndroidRuntime: 原因:java.lang.NullPointerException 10-12 17:20:27.534 17724-17724 /com.example.dell.drawdemo E/AndroidRuntime:在 com.example.dell.drawdemo.MainActivity.onActivityResult(MainActivity.java:129)
-
希望这能有所帮助 - @Jas
-
@DrashtiKapadia 使用 logcat 输出编辑您的问题,在 cmets 中阅读会令人困惑
标签: android android-intent camera