【问题标题】:onActivityResult returns with data = nullonActivityResult 返回 data = null
【发布时间】:2012-02-10 17:14:27
【问题描述】:

好的,这就是我要发送的意图

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
startActivityForResult(intent, REQUEST_CODE);

然后在 onActivityResult 我这样做:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.i("Intent name:",data.toString());
        if (requestCode == REQUEST_CODE){
            if (resultCode == Activity.RESULT_OK){
                Toast.makeText(this, "Image saved to \n" + fileUri.toString() , Toast.LENGTH_LONG).show();
                Toast.makeText(this, "Result Code: " + resultCode , Toast.LENGTH_LONG).show();
                //Bitmap mBitMap = BitmapFactory.decodeFile(data.getData().toString());
                //imageView.setImageBitmap(mBitMap);
            }
            else if (resultCode == RESULT_CANCELED){
                Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG).show();
            }

        }

        super.onActivityResult(requestCode, resultCode, data);
    }  

LogCat 在显示 Image Saved....的行显示 NullPointerException。
还有这个:
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}

无论我尝试使用我班级的data 对象还是fileUri 字段,都会发生这种情况。
为什么返回数据null
为什么即使我使用类的字段,我仍然会得到同样的错误?

【问题讨论】:

  • 你没有使用 getIntent() 来访问 onActivity Result 中的 MediaStore.EXTRA_OUTPUT
  • 不。不知道如何使用它。能给我个sn-p代码吗?
  • fileUri 是静态全局变量吗?
  • intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);在 Activity 的 Result_OK 中使用 Uri u = data.getData();获取 uri 还要确保 fileUri 是 Uri 而不是文件名..
  • 数据返回 null。我已将文件的所有处理移出onActivityResult。我在其中所做的只是imageView.setImageBitmap 并且仍然会因 LogCat 中具有相同描述的致命异常而停止

标签: java android android-intent


【解决方案1】:

每当您通过带有相机意图的 EXTRAOUTPUT 来保存图像时,即

intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

在文件中,onActivityResult 内的 data 参数总是返回 null。因此,不要使用数据来检索图像,而是使用文件路径来检索Bitmap

所以onActivityResult 会是这样的:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            String[] fileColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getContentResolver().query(imageUri,
                fileColumn, null, null, null);
            String contentPath = null;
            if (cursor.moveToFirst()) {
                contentPath = cursor.getString(cursor
                    .getColumnIndex(fileColumn[0]));

                Bitmap bmp = BitmapFactory.decodeFile(contentPath);
                ImageView img = (ImageView) findViewById(R.id.imageView1);
                img.setImageBitmap(bmp);


            } else if (resultCode == RESULT_CANCELED) {
                Toast.makeText(this, "Capture Cancelled", Toast.LENGTH_LONG)
                .show();
            } else {
                Toast.makeText(this, "Capture failed", Toast.LENGTH_LONG)
                .show();
            }

        }

        super.onActivityResult(requestCode, resultCode, data);
    }

确保您已将 imageUri 或 fileUri 作为全局变量,以便您也可以在 onActivityResult 中访问它。祝你好运

【讨论】:

    【解决方案2】:

    在这些情况下处理数据的正确/首选方法如下:

    在调用的Activity中设置数据到Intent,然后setResult代码为RESULT_OK,然后完成那个activity。

    在此接收活动中,检查结果代码..并从 Intent 变量中检索数据为:intent.getExtra("... "); //您在已关闭的子活动中设置的变量..

    【讨论】:

    • 你在误解我的意思。我实际上是在调用手机自己的相机应用程序。我不需要自己设置结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多