android摄像头导致空指针异常

android摄像头导致空指针异常,android,android-intent,camera,nullpointerexception,Android,Android Intent,Camera,Nullpointerexception,我的应用程序在尝试拍照和使用相机时出现空指针异常。 我的应用程序如此调用相机: //go to camera app. Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile())); //open camera. Take

我的应用程序在尝试拍照和使用相机时出现空指针异常。 我的应用程序如此调用相机:

        //go to camera app.

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(getTempFile()));

        //open camera. Take picture. 

        startActivityForResult(intent, PIC_ONE);
结果代码为:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == PIC_ONE)
            {



                    //prevent null pointer
                    if(data.getData()!=null){
                        uri1 = data.getData();
                        File f = new File(getPath(uri1));//<-NULL POINTER EXCEPTION
                        //...do stuff
    }
以下是日志:

    06-07 22:53:59.650: ERROR/AndroidRuntime(3935): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { act=inline-data dat=file:///mnt/sdcard/image.tmp typ=image/jpeg (has extras) }} to activity {com.myapp.myactivity/myactivity.java}: java.lang.NullPointerException
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2553)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2595)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.app.ActivityThread.access$2000(ActivityThread.java:121)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.os.Looper.loop(Looper.java:138)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at android.app.ActivityThread.main(ActivityThread.java:3701)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at java.lang.reflect.Method.invokeNative(Native Method)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at java.lang.reflect.Method.invoke(Method.java:507)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at dalvik.system.NativeStart.main(Native Method)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935): Caused by: java.lang.NullPointerException
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at java.io.File.fixSlashes(File.java:205)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at java.io.File.init(File.java:189)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at java.io.File.<init>(File.java:139)
06-07 22:53:59.650: ERROR/AndroidRuntime(3935):     at com.myapp.myactivity.java.onActivityResult(myactivity.java:928)
在拍照和整理过程中,甚至从未调用onRestoreInstanceState。所以我不知道发生了什么。为什么要调用此空指针

        if (data != null) {
                File myFile;

                Uri selectedImageUri = data.getData();
                String filemanagerstring = selectedImageUri.getPath();
                String selectedImagePath = getPath(selectedImageUri);
                if (selectedImagePath != null)
                    myFile = new File(selectedImagePath);
                else if (filemanagerstring != null)
                    myFile = new File(filemanagerstring);
                 } 
//这里是getPath方法

public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }
//这里是getPath方法

public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }
试试这个

public String getPath(Uri photoUri) {

 String filePath ="";
    if (photoUri != null){
            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(photoUri, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            filePath = cursor.getString(columnIndex);
            cursor.close();
      }
  return filePath;
 }
试试这个

public String getPath(Uri photoUri) {

 String filePath ="";
    if (photoUri != null){
            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(photoUri, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            filePath = cursor.getString(columnIndex);
            cursor.close();
      }
  return filePath;
 }

你能解释一下代码的第一部分发生了什么吗?为什么selectedImagePath会为空?您能解释一下第一段代码中发生了什么吗?为什么selectedImagePath为空?