意图不在onActivityResult中工作

时间:2015-11-15 18:52:29

标签: android android-intent image-gallery onactivityresult

我正在尝试从第一个活动中的图库中获取图像,并希望在第二个活动的ImageView中生成图像。

以下是第1次活动的代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageVew = (ImageView) findViewById(R.id.imageView);
}

public void useGalleryMethod(View view) {
    //this is for picking Image from Gallery or file
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(intent, 0);
}

第一类中的onActivityResult():

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Bitmap bitmap = null;
    if (requestCode == 0 && resultCode == RESULT_OK && data != null) {

        try {
            //this is for picking Image from Gallery or file
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
            imageVew.setImageBitmap(bitmap);

            Intent intent = new Intent(MainActivity.this,ImageViewActivity.class);
            intent.putExtra("Bitmap",bitmap);
            startActivity(intent);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

第二项活动准则:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_image_view);

    Intent getIntentInfo = getIntent();

    if(getIntentInfo != null){
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        Bitmap bitmap = (Bitmap) getIntentInfo.getParcelableExtra("Bitmap");
        imageView.setImageBitmap(bitmap);
    }else{
        return;
    }
}

应用程序正常运行并在第一类ImageView中显示图库图像,而不是使用onActivityResult方法中的Intent进入第二个活动。

请让我知道我的代码有什么问题? ? 还是有其他办法,我没有朝着正确的方向前进?

2 个答案:

答案 0 :(得分:0)

使用此方法比您使用的Parcelable更方便:

方法1:您可以将其保存到SD卡并进行检索。

OR 方法2:

将位图转换为字节数组: -

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

使用Intent传递字节数组: -

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);

从包中收到ByteArray的位图: -

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);

image.setImageBitmap(bmp);

答案 1 :(得分:0)

在第一项活动的onActivityResult()中,将此替换为

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Bitmap bitmap = null;
    if (requestCode == 0 && resultCode == RESULT_OK && data != null) {

        try {
            //this is for picking Image from Gallery or file
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
            imageVew.setImageBitmap(bitmap);

            // Send Image URI istead
            Intent intent = new Intent(MainActivity.this,ImageViewActivity.class);
            intent.putExtra("imageUri", data.getData().toString());
            startActivity(intent);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在Second Activity上做了类似的事情 -

if(getIntentInfo != null){
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),
            Uri.parse(getIntentInfo.getStringExtra("imageUri")));
        imageVew.setImageBitmap(bitmap);
    }else{
        return;
    }