显示java.lang.NullPointerException上捆绑额外= data.getExtras(); [英] java.lang.NullPointerException on Bundle extras = data.getExtras();

查看:811
本文介绍了显示java.lang.NullPointerException上捆绑额外= data.getExtras();的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图捕捉图像并将其保存在画廊。对于在我的onCreate code

I'm trying to capture image and save it in gallery. For that in onCreate my code

    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
    imageUri = Uri.fromFile(photo);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    startActivityForResult(intent, TAKE_PICTURE);

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == TAKE_PICTURE) {
        Log.v("data", "data: " + data);
        Bundle extras = data.getExtras();
        if (extras.containsKey("data")) {
            bitmap = (Bitmap) extras.get("data");
            // ByteArrayOutputStream baos = new ByteArrayOutputStream();
            // bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
            // byte[] image = baos.toByteArray();
            if (bitmap != null) {
                // BitmapFactory.Options options = new
                // BitmapFactory.Options();
                // options.inSampleSize = 5;
                // Bitmap myImage = BitmapFactory.decodeByteArray(image, 0,
                // image.length, options);
                imageView.setImageBitmap(bitmap);
            }
        } else {
            Toast.makeText(getBaseContext(), "Please capture again", Toast.LENGTH_LONG).show();
        }
        showPopUpForUpload();
    }
}

现在我能捕捉到的图像,但我得到错误后

Now I'm able to capture image, but after that I'm getting error

12-17 15:28:56.090: E/AndroidRuntime(4684): FATAL EXCEPTION: main
12-17 15:28:56.090: E/AndroidRuntime(4684): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {com.example.fashiongirl/com.example.fashiongirl.HomeActivity}: java.lang.NullPointerException
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2744)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:2787)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.ActivityThread.access$2000(ActivityThread.java:122)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1032)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.os.Looper.loop(Looper.java:132)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.ActivityThread.main(ActivityThread.java:4025)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at java.lang.reflect.Method.invokeNative(Native Method)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at java.lang.reflect.Method.invoke(Method.java:491)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at dalvik.system.NativeStart.main(Native Method)
12-17 15:28:56.090: E/AndroidRuntime(4684): Caused by: java.lang.NullPointerException
12-17 15:28:56.090: E/AndroidRuntime(4684):     at com.example.fashiongirl.HomeActivity.onActivityResult(HomeActivity.java:47)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.Activity.dispatchActivityResult(Activity.java:4541)
12-17 15:28:56.090: E/AndroidRuntime(4684):     at android.app.ActivityThread.deliverResults(ActivityThread.java:2740)
12-17 15:28:56.090: E/AndroidRuntime(4684):     ... 11 more

空指针异常是行

Bundle extras = data.getExtras();

那么,什么是问题呢?

So what is the problem?

推荐答案

我认为它的 Android版本的一个问题4.0 +

刚刚尝试删除,

File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg");
imageUri = Uri.fromFile(photo);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

当你调用拍摄意图。现在,你的结果束的onActivityResult()不是 NULL

When you call Capture intent. Now your resulted bundle onActivityResult() is not NULL.

其实,当你给 MediaStore.EXTRA_OUTPUT 参数,相机意图则相机的应用程序不捆绑数据的回调。 (我发现的Andr​​oid 4.0 +这个问题)

Actually, When you are giving MediaStore.EXTRA_OUTPUT parameter to Camera Intent then camera application doesn't callback with bundled data. (I find this issues in Android 4.0 +)

您必须得到来自乌里图像文件,你设置为 MediaStore.EXTRA_OUTPUT 参数。

You have to get the Image file from Uri which you set as MediaStore.EXTRA_OUTPUT parameter.

更新:

或使用下面 pathFromUri()方法,并通过开放的,你都设置为相机的意图,并获得真正的文件路径,现在这个你不必使用捆绑额外= data.getExtras();

Or use below pathFromUri() method and pass Uri which you are set to camera intent and get the Real File Path, now for this you don't have to use Bundle extras = data.getExtras();

private String pathFromUri(Uri imageUri) {
    String[] filePathColumn = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(imageUri, filePathColumn,
                null, null, null);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String filePath = cursor.getString(columnIndex);
    return filePath ;
}

这篇关于显示java.lang.NullPointerException上捆绑额外= data.getExtras();的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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