You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java新手求教:如何在Android两个Activity间传递mImage等存储项?

嘿,刚上手Java Android开发的话,Activity之间传数据其实没那么复杂,我帮你把需求拆成两部分,给你最直接的实现方式:

一、传递图片(mImage)到Activity2

这里得看你的mImage具体是什么类型,推荐两种常用方案:

  • 如果是图片文件路径/Uri:这是最省内存的方式,优先用这个
    在Activity1里发起跳转并传值:

    Intent intent = new Intent(Activity1.this, Activity2.class);
    // 如果是字符串格式的文件路径
    intent.putExtra("IMAGE_PATH", mImagePath);
    // 如果是Uri对象(比如从相册选图得到的Uri)
    intent.putExtra("IMAGE_URI", mImageUri);
    startActivity(intent);
    

    在Activity2里接收并使用:

    // 接收路径
    String imagePath = getIntent().getStringExtra("IMAGE_PATH");
    // 或者接收Uri
    Uri imageUri = getIntent().getParcelableExtra("IMAGE_URI");
    // 之后可以用Glide、Picasso或者原生API加载图片到ImageView
    
  • 如果是Bitmap对象:虽然能直接传,但大Bitmap容易触发内存异常,尽量少用
    Activity1传值:

    Intent intent = new Intent(Activity1.this, Activity2.class);
    // Bitmap实现了Parcelable接口,直接放入Intent
    intent.putExtra("IMAGE_BITMAP", mImage);
    startActivity(intent);
    

    Activity2接收:

    Bitmap receivedBitmap = getIntent().getParcelableExtra("IMAGE_BITMAP");
    if (receivedBitmap != null) {
        yourImageView.setImageBitmap(receivedBitmap);
    }
    
二、通用存储项的传递(字符串、数字、自定义对象等)

日常开发里的大多数数据,用Intent.putExtra就能轻松搞定,分两种情况:

  • 基础数据类型(字符串、int、boolean等):直接传就行
    Activity1传值:

    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("USER_NAME", "Tom");
    intent.putExtra("IS_VIP", true);
    intent.putExtra("SCORE", 95);
    startActivity(intent);
    

    Activity2接收:

    String userName = getIntent().getStringExtra("USER_NAME");
    boolean isVip = getIntent().getBooleanExtra("IS_VIP", false); // 第二个参数是默认值
    int score = getIntent().getIntExtra("SCORE", 0);
    
  • 自定义对象:让对象实现Parcelable接口(比Serializable更高效)
    举个例子,自定义一个User类:

    public class User implements Parcelable {
        private String name;
        private int age;
    
        // 构造方法、getter/setter自行补充
    
        // Parcelable要求的构造方法
        protected User(Parcel in) {
            name = in.readString();
            age = in.readInt();
        }
    
        // 静态Creator,用于从Parcel中还原对象
        public static final Creator<User> CREATOR = new Creator<User>() {
            @Override
            public User createFromParcel(Parcel in) {
                return new User(in);
            }
    
            @Override
            public User[] newArray(int size) {
                return new User[size];
            }
        };
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        // 把对象数据写入Parcel
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeInt(age);
        }
    }
    

    传递自定义对象:

    Intent intent = new Intent(Activity1.this, Activity2.class);
    intent.putExtra("USER_INFO", new User("Tom", 25));
    startActivity(intent);
    

    接收自定义对象:

    User user = getIntent().getParcelableExtra("USER_INFO");
    

总的来说,最简单的实现方式就是利用Intent.putExtra和getIntent().getXXXExtra()组合,根据你要传的数据类型选对应的方法就行,图片优先传路径/Uri更稳妥。

内容的提问来源于stack exchange,提问作者Tom Palmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:57:26