仿真器崩溃拍摄照片时(NullPointerException异常) [英] Emulator crashes when capturing a photo (NullPointerException)

查看:151
本文介绍了仿真器崩溃拍摄照片时(NullPointerException异常)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在同时拍摄照片的一些问题。

I'm having some issues while capturing photos.

到现在为止,我可以把照片从相机,从模拟器和真实设备,没有任何问题。但是那些照片,被保存在一个默认路由。

Until now, I could take pictures from camera, from emulator and from a real device, without problems. But those pictures, were saved on a default route.

我想编辑这条路,这样我就可以把我自己的。

I wanted to edit that route, so I could set my own.

我就是这么做的:

File folder = new File(Environment.getExternalStorageDirectory().toString()+"/ImagesFolder/");
            folder.mkdirs();

            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            Uri uriSavedImage=Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString()+"/ImagesFolder/imatge.jpg"));
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

            startActivityForResult(cameraIntent, 1888);

这是工作在真实设备上,索尼爱立信Xperia雷。它创建的文件夹,并保存图像那里。

This is working on a real device, a Sony Ericsson Xperia Ray. It creates the folder, and saves the image there.

但问题是在模拟器。恐怕这会发生在其他设备上。

But the issue is on emulator. I'm afraid this will happen on other devices.

这是logcat的:

01-06 21:35:21.115: E/AndroidRuntime(1565): FATAL EXCEPTION: main
01-06 21:35:21.115: E/AndroidRuntime(1565): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=264032, result=-1, data=null} to activity {com.exercise.AndroidViewPager/com.exercise.AndroidViewPager.AndroidViewPagerActivity}: java.lang.NullPointerException
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3319)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3362)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.ActivityThread.access$1100(ActivityThread.java:141)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.os.Looper.loop(Looper.java:137)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.ActivityThread.main(ActivityThread.java:5039)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at java.lang.reflect.Method.invokeNative(Native Method)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at java.lang.reflect.Method.invoke(Method.java:511)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at dalvik.system.NativeStart.main(Native Method)
01-06 21:35:21.115: E/AndroidRuntime(1565): Caused by: java.lang.NullPointerException
01-06 21:35:21.115: E/AndroidRuntime(1565):     at com.exercise.AndroidViewPager.MyFragmentD.onActivityResult(MyFragmentD.java:52)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:152)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.Activity.dispatchActivityResult(Activity.java:5293)
01-06 21:35:21.115: E/AndroidRuntime(1565):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3315)
01-06 21:35:21.115: E/AndroidRuntime(1565):     ... 11 more

崩溃:

01-06 21:35:21.115: E/AndroidRuntime(1565): Caused by: java.lang.NullPointerException
01-06 21:35:21.115: E/AndroidRuntime(1565):     at com.exercise.AndroidViewPager.MyFragmentD.onActivityResult(MyFragmentD.java:52)

来自这里:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if( requestCode == 1888 && resultCode == -1) { //-1 = TOT HA ANAT BE.
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        Log.d("debugging",""+photo.getHeight());
        Log.d("debugging",""+photo.getWidth());
        ((ImageView) myFragmentView.findViewById(R.id.fotoCapturada)).setImageBitmap(photo);
    }
}

没错:

Bitmap photo = (Bitmap) data.getExtras().get("data");

经过一番研究,我发现没有什么明确的...

After some research, I found out nothing clear...

你能帮助我在这个问题上?

Can you help me on this issue?

感谢。

推荐答案

由于数据的额外方法不工作,你可以尝试存储文件或当其目的是推出路径的领域。

Since your data extras method isn't working, you could try storing a field of the file or the path when the Intent is launched.

File resultingFile;//This will be in your class definition

File folder = new File(Environment.getExternalStorageDirectory().toString()+"/ImagesFolder/");
folder.mkdirs();

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
resultingFile = new File(folder.toString() + "/image.jpg");
Uri uriSavedImage=Uri.fromFile(resultingFile);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);

startActivityForResult(cameraIntent, 1888);

当你进入onActivityResult你可以测试对RESULT_OK和RESULT_CANCELED结果code左右。当我使用onActivityResult,我这样做是这样的:

So when you enter onActivityResult you can test the resultCode against RESULT_OK and RESULT_CANCELED. When I use onActivityResult, I do it like this:

if(requestCode == 1888){
  if(resultCode == RESULT_OK){ //Called when the user saves the image
     if(resultingFile.exists(){
       Bitmap photo = BitmapFactory.decodeFile(resultingFile.getPath()); 
       ((ImageView) myFragmentView.findViewById(R.id.fotoCapturada)).setImageBitmap(photo);
     }
  }else if(resultCode == RESULT_CANCELED){ //Called when the user presses back or cancels the saving of the image

  }
}

这篇关于仿真器崩溃拍摄照片时(NullPointerException异常)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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