【问题标题】:Intent not working in onActivityResult意图在 onActivityResult 中不起作用
【发布时间】:2015-11-15 18:52:29
【问题描述】:

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

这是第一个活动的代码:

 @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;
    }
}

应用程序运行正常,仅在 1st Class 的 ImageView 中显示图库图像,而不使用 onActivityResult 方法中的 Intent 进入 2nd Activity。

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

【问题讨论】:

  • 检查答案,它工作正常

标签: android android-intent image-gallery onactivityresult


【解决方案1】:

使用这个比你用的 Parcelable 更方便的方法:

方法一:你可以把它存到sd卡里再找回来。

或 方法二:

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

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);

【讨论】:

  • 位图 bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);我没有任何可绘制对象并且 ic.launcher 出现错误(无法解析符号 ic.launcher)
  • 问题已解决:我使用 Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());而不是位图 bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);以及将位图转换为字节数组的其余代码并解决了问题。谢谢
  • 很高兴为您提供帮助
【解决方案2】:

在第一个活动的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;
    }

【讨论】:

  • 位图位图 = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(getIntentInfo.getString("imageUri")));无法将 .getString("imageUri") 与 Intent 对象“getIntentInfo” 一起使用
  • 不!还是行不通。但感谢您的时间和帮助。我的问题已经解决了!
猜你喜欢
  • 2018-05-16
  • 2012-06-02
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2012-08-29
相关资源
最近更新 更多