Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 意图不在onActivityResult中工作_Android_Android Intent_Image Gallery_Onactivityresult - Fatal编程技术网

Android 意图不在onActivityResult中工作

Android 意图不在onActivityResult中工作,android,android-intent,image-gallery,onactivityresult,Android,Android Intent,Image Gallery,Onactivityresult,我正在尝试从我的第一个活动的图库中获取图像,并希望在第二个活动的ImageView中获得结果图像 以下是第一个活动的代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageVew = (ImageView) findViewById

我正在尝试从我的第一个活动的图库中获取图像,并希望在第二个活动的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);
}
@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;
    }
}
第一个类中的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_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);
}
@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进入第二个活动

请让我知道我的代码有什么问题?
或者有没有别的办法,我走的方向不对

使用比您使用的包裹更方便的方法:

方法1:您可以将其保存到sd卡并检索

或 方法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 = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
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);
传递字节数组的意图:-

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 = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
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);
从bundle中接收的ByteArray获取位图:-

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 = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
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);
在第一个活动的
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();
        }
    }
在第二个活动中,做一些类似的事情-

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

检查答案,它工作正常bmp=BitmapFactory.decodeResource(getResources(),R.drawable.ic_启动器);我没有任何可绘制的,ic.launcher出现错误(无法解决符号ic.launcher)问题已解决:我使用位图Bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(),data.getData());代替位图bmp=BitmapFactory.decodeResource(getResources(),R.drawable.ic_启动器);以及将位图转换为字节数组的其余代码,并解决了该问题。很高兴能帮助您位图bitmap=MediaStore.Images.Media.getBitmap(getContentResolver(),Uri.parse(getIntentInfo.getString(“imageUri”));无法将.getString(“imageUri”)与意图对象“getIntentInfo”一起使用否!仍然不起作用。但是谢谢你的时间和帮助。我的问题解决了!