android相机导致空指针异常 [英] android camera causing null pointer exception

查看:45
本文介绍了android相机导致空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序在尝试使用相机拍照时出现空指针异常.我的应用程序这样调用相机:

My app has null pointer exceptions when it tries to take a picture and with the camera. My app calls the camera thusly:

        //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);

和onresult代码是:

and the onresult code is:

@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
    }

这会导致空指针异常,如上所示.getPath 导致此空指针.getPath() 如下所示.此方法未按应有的方式从媒体存储中检索图像.

This causes a nullpointer exception, as shown above. getPath causes this null pointer. getPath() is shown below. This method is not retrieving the image from the mediastore as it should.

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

下面是日志:

    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)

奇怪的是,这个应用程序在 Xperia X10 上运行良好,但在包括 Xperia acro 在内的新手机上,它有这个空指针.我已经研究过它,似乎问题可能是由于相机应用程序过于笨拙并导致初始活动完成.

The strange thing is this app works fine on an Xperia X10, but on newer phones including Xperia acro it has this null pointer. I have researched it and it seems the problem could be caused because the camera app is too chunky and causes the initial activity to finish.

所以我覆盖了这两种方法:

So I overrode these two methods:

 @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if (uri1 != null) {
            outState.putString("cameraImageUri1", uri1.toString());
        }

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        if (savedInstanceState.containsKey("cameraImageUri1")) {
            uri1 = Uri.parse(savedInstanceState.getString("cameraImageUri1"));
        }


        Log.v("THIS ACTIVITY","has called onrestore...");
    }

onRestoreInstanceState 在拍照和完成过程中甚至从未被调用.所以我不知道发生了什么.为什么会调用这个空指针

onRestoreInstanceState is never even called during the picture taking and finishing process. So I dont know what is happening. Why is this null pointer being called

推荐答案

        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方法

//here getPath method

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;
    }

这篇关于android相机导致空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆