android摄像头应用程序中的空指针异常

android摄像头应用程序中的空指针异常,android,android-camera,android-contentprovider,Android,Android Camera,Android Contentprovider,我正在尝试在Android应用程序中保存图片。这是我的回调函数: ShutterCallback myShutterCallback = new ShutterCallback(){ @Override public void onShutter() { Log.d(TAG, "shutter callback"); }}; PictureCallback myPictureCallback_RAW = new

我正在尝试在Android应用程序中保存图片。这是我的回调函数:

ShutterCallback myShutterCallback = new ShutterCallback(){

    @Override
    public void onShutter() {
        Log.d(TAG, "shutter callback");
        
    }};


PictureCallback myPictureCallback_RAW = new PictureCallback(){

    @Override
    public void onPictureTaken(byte[] arg0, Camera arg1) {
        Log.d(TAG, "raw callback");
        
    }};
    
PictureCallback myPictureCallback_JPG = new PictureCallback(){

    @Override
    public void onPictureTaken(byte[] arg0, Camera arg1) {
        // TODO Auto-generated method stub
        Bitmap bitmapPicture 
            = BitmapFactory.decodeByteArray(arg0, 0, arg0.length);  
        
        ContentValues values = new ContentValues();
        values.put(Images.Media.TITLE, "title");
        values.put(Images.Media.BUCKET_ID, "test");
        values.put(Images.Media.DESCRIPTION, "test Image taken");
        values.put(Images.Media.MIME_TYPE, "image/jpeg");
        
        Uri uriTarget = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);

        OutputStream imageFileOS;
        try {
            imageFileOS = getContentResolver().openOutputStream(uriTarget);
            imageFileOS.write(arg0);
            imageFileOS.flush();
            imageFileOS.close();
            
            Toast.makeText(CameraView.this, 
                    "Image saved: " + uriTarget.toString(), 
                    Toast.LENGTH_LONG).show();
            
        } catch (FileNotFoundException e) {
            Log.d(TAG, "file not found " + e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            Log.d(TAG, "io exception " + e.getMessage());
            e.printStackTrace();
        }

        //camera.startPreview();
        finish();
    }
};
问题是,对于几种不同类型的手机,我在这一行得到一个
NullPointerException

imageFileOS = getContentResolver().openOutputStream(uriTarget);
以前有人碰到过这个吗

编辑堆栈跟踪 它看起来像一个问题。如果媒体提供程序引发任何异常,请检查日志猫,并使用调试器检查调用时
uriTarget
是否为null
imageFileOS=getContentResolver().openOutputStream(uriTarget)

原来问题是HTC设备特有的。我通过将图像文件保存在设备上的DCIM文件夹中解决了此问题,但没有使用getContentResolver获取路径。

您是否检查了
uriTarget
是否为空?我只是检查了一下,它为空。我怎样才能防止这种情况?你知道为什么ContentResolver不会为uri插入行吗?那么你用什么来获取uri呢?你能更具体一点,这样对我有帮助吗。。我面临着同样的问题,并试图解决在我的情况下,这是三星移动
04-24 11:52:03.979: E/AndroidRuntime(12695): FATAL EXCEPTION: main
04-24 11:52:03.979: E/AndroidRuntime(12695): java.lang.NullPointerException
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:465)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.content.ContentResolver.openOutputStream(ContentResolver.java:361)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.content.ContentResolver.openOutputStream(ContentResolver.java:337)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at com.appfury.grafighters.CameraView$4.onPictureTaken(CameraView.java:234)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.hardware.Camera$EventHandler.handleMessage(Camera.java:536)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.os.Looper.loop(Looper.java:150)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at android.app.ActivityThread.main(ActivityThread.java:4263)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at java.lang.reflect.Method.invokeNative(Native Method)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at java.lang.reflect.Method.invoke(Method.java:507)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-24 11:52:03.979: E/AndroidRuntime(12695):    at dalvik.system.NativeStart.main(Native Method)