当前位置: 首页 > 面试题库 >

android相机:无法将结果ResultInfo {who = null,request = 0,result = -1,data =null}传递给活动

闻华容
2023-03-14
问题内容

我真的很沮丧地解决了我的问题,我有一个使用相机的应用程序,当相机拍摄照片时,它将在活动中显示,当我不使用cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri);照片时,将在活动中显示,但是名称和路径文件未显示就像我想要的。我正在使用galaxy选项卡进行编译,我已经按照教程从此处,此处和此处解决了我的问题,但是我的应用程序仍然强制关闭并出错,这是我的代码:

{

                File sdCard= Environment.getExternalStorageDirectory();
                File path = new File (sdCard.getAbsolutePath() + "/android/data/spaj_foto");
                path.mkdir();
                File file= new File (path,"spaj_foto.png");
                String filePath ="/android/data/spaj_foto/spaj_foto.png";

                  try {
                      file.createNewFile();
                    } catch (IOException e) {}


                 mPhotoUri = Uri.fromFile(file); 
                 values.put( MediaStore.Images.ImageColumns.DATA, file.getPath());
                 mPhotoUri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

                  Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
                  cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri);
                  startActivityForResult(cameraIntent,TAKE_PHOTO_CODE );

            }

活动结果方法:

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
                Bitmap photo = (Bitmap) data.getExtras().get("data"); 
                image_spaj.setImageBitmap(photo);


                // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
                Uri tempUri = getImageUri(getApplicationContext(), photo);

                // CALL THIS METHOD TO GET THE ACTUAL PATH
                File finalFile = new File(getRealPathFromURI(tempUri));

//              System.out.println(mImageCaptureUri);
            }  
        }
        public String getRealPathFromURI(Uri mPhotoUri) {
            Cursor cursor = getContentResolver().query(mPhotoUri, null, null, null, null); 
            cursor.moveToFirst(); 
            int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
            return cursor.getString(idx); 
        }

        public Uri getImageUri(Context inContext, Bitmap inImage) {
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
            return Uri.parse(path);
        }

这是我的logcat说的:

    09-27 10:59:43.186: E/AndroidRuntime(31318): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity {org.example.touch/org.example.touch.FormSpaj}: java.lang.NullPointerException
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3179)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3222)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.ActivityThread.access$1100(ActivityThread.java:140)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1276)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.os.Looper.loop(Looper.java:137)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.ActivityThread.main(ActivityThread.java:4895)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at java.lang.reflect.Method.invokeNative(Native Method)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at java.lang.reflect.Method.invoke(Method.java:511)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at dalvik.system.NativeStart.main(Native Method)
09-27 10:59:43.186: E/AndroidRuntime(31318): Caused by: java.lang.NullPointerException
09-27 10:59:43.186: E/AndroidRuntime(31318):    at org.example.touch.FormSpaj.onActivityResult(FormSpaj.java:993)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.Activity.dispatchActivityResult(Activity.java:5347)
09-27 10:59:43.186: E/AndroidRuntime(31318):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3175)
09-27 10:59:43.186: E/AndroidRuntime(31318):    ... 11 more

我真的希望有人可以帮助我解决我的问题,我已经堆满了,再也无法思考,请有人帮助我…谢谢。


问题答案:

确保您同时具有“ 摄像头权限” 和“ 读取/写入外部存储 权限”。

试试看,这对我来说就像魅力

private String selectedImagePath = "";
    final private int PICK_IMAGE = 1;
    final private int CAPTURE_IMAGE = 2;

public Uri setImageUri() {
        // Store image in dcim
        File file = new File(Environment.getExternalStorageDirectory() + "/DCIM/", "image" + new Date().getTime() + ".png");
        Uri imgUri = Uri.fromFile(file);
        this.imgPath = file.getAbsolutePath();
        return imgUri;
    }


    public String getImagePath() {
        return imgPath;
    }

btnGallery.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, ""), PICK_IMAGE);

            }
        });

        btnCapture.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, setImageUri());
                startActivityForResult(intent, CAPTURE_IMAGE);
            }
        });

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != Activity.RESULT_CANCELED) {
            if (requestCode == PICK_IMAGE) {
                selectedImagePath = getAbsolutePath(data.getData());
                imgUser.setImageBitmap(decodeFile(selectedImagePath));
            } else if (requestCode == CAPTURE_IMAGE) {
                selectedImagePath = getImagePath();
                imgUser.setImageBitmap(decodeFile(selectedImagePath));
            } else {
                super.onActivityResult(requestCode, resultCode, data);
            }
        }

    }


public Bitmap decodeFile(String path) {
        try {
            // Decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(path, o);
            // The new size we want to scale to
            final int REQUIRED_SIZE = 70;

            // Find the correct scale value. It should be the power of 2.
            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_SIZE && o.outHeight / scale / 2 >= REQUIRED_SIZE)
                scale *= 2;

            // Decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeFile(path, o2);
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return null;

    }

public String getAbsolutePath(Uri uri) {
        String[] projection = { MediaColumns.DATA };
        @SuppressWarnings("deprecation")
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } else
            return null;
    }


 类似资料:
  • 在这个问题上有人能帮我吗? 我在打印logcat。但我不能复制这一期。我的用户很少会遇到这个问题。 这是从我的用户的Logcat值复制的,他使用的是Android版本6.0.1 提前道谢。

  • 我试着让我的相机为我的android应用程序工作,但我一直得到以下错误 02-07 22:30:48.217 131 97-13197/com.example.romsm.lap E/AndroidRuntime:致命异常:main java.lang.RuntimeException:将结果ResultInfo{who=null,request=1,result=-1,data=intent{a

  • 请帮我解决这个Android相机。 我得到的错误如下: 它也给出了这个警告,这是奇怪的,因为我压缩图像: 我的应用程序允许用户从图库中选择一张照片或使用相机拍摄一张照片。正如你从代码中可以看出的那样,用户添加的照片数量没有限制。 在主页(createPropertyActivity*5*)中,用户点击拍照按钮,选择相机或画廊,然后选择(或拍摄)一张照片,然后应用程序进入一个页面(createPro

  • 问题内容: 一个讨论是关于将空值传递给方法。 它代表了不同的处理方式: 我更喜欢断言方法,但是我不喜欢断言默认情况下处于关闭状态的事实。 该书最后指出: 在大多数编程语言中,没有很好的方法来处理调用者意外传递的null。因为是这种情况,所以合理的方法是默认情况下禁止传递null。 它实际上并没有涉及如何实施此限制? 无论哪种方式,您中的任何人都有强烈的意见。 问题答案: 在这里,使用断言和引发异常

  • 和empdomain.updateemp() 我只是一个新手玩2,jpa持久化,所以我不知道如何修复异常错误,请帮助。