【问题标题】:Intent problem Android意图问题 Android
【发布时间】:2011-09-14 23:11:55
【问题描述】:

我有一个类可以访问本地相机来拍照。拍完照片后,它会保存在一个文件夹中,并且该照片将显示在一个新的活动中。

问题是,我尝试在拍摄照片后获取我放入意图的数据,但它总是说意图是null.pointer.exception。下面是我的课,请大家帮帮我。

import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

 public class CameraTestActivity extends Activity {
Button start;
final int TAKE_PICTURE = 2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    start = (Button)findViewById(R.id.startButton);

    start.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            File file = new File(Environment.getExternalStorageDirectory().toString() + "/testImage/" + "toBeUpload.jpg");
            Uri imageUri = Uri.fromFile(file);


            Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
            cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
            cameraIntent.putExtra("path", imageUri.toString());
            startActivityForResult(cameraIntent,TAKE_PICTURE);

        }
    });
}

protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    super.onActivityResult(requestCode, resultCode, intent);
    if(resultCode == RESULT_OK)
    {
        if(requestCode == TAKE_PICTURE)
        {
            /*ERRROR OCCUR HERE*/
            Bundle extras = intent.getExtras();
        }
    }
}
}

【问题讨论】:

标签: android


【解决方案1】:

Rich 和 userSeven7s 是对的,但在您的特定情况下,这不是重点:您实际上并不需要 Intent 为照片选择器返回数据(例外:一些有缺陷的非常旧的手机只在附加内容中写入缩略图,并且实际上不要将图像写入您指定的路径,但这是另一回事)- 只需查找写入您最初传递意图的 URI 的图像。

【讨论】:

  • 可以详细说明您的最后几句话“只需查找写入您最初传递意图的 URI 的图像。”对不起,我的英语不太好。
  • 你写了这行:cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 在那里你可以找到全尺寸的图片。
  • 你的意思是我直接访问 Uri 但没有从意图中获取 Uri?这可能有效,但我仍然不明白意图为空的原因。
  • 意图为空,还是额外数据为空?如果只是额外的数据,请参阅stackoverflow.com/questions/1910608/…(Lukas 将其标记为重复)。
  • intent 是 null 而不是额外的数据。
【解决方案2】:

我想知道对 super.onActivityResult 的调用是否正在消耗 Intent 实例并在它完成时将其设置为 null。你不需要调用超类,因为你自己实现它,所以试试看。

【讨论】:

  • 我试过不调用super.onActivityResult,但Intent为null。
【解决方案3】:

在处理完事件后拨打super.onActivityResult(requestCode, resultCode, intent);

【讨论】:

    【解决方案4】:

    试试:

    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
    

    参考: http://achorniy.wordpress.com/2010/04/26/howto-launch-android-camera-using-intents/

    【讨论】:

    • 您使用的请求代码纯粹用于内部参考(因此您可以明确区分您开始的活动正在返回结果)。使用不同的值不会改变实际返回的意图,只会改变它返回的请求代码。
    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2012-06-23
    • 2016-07-31
    相关资源
    最近更新 更多