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
相关产品推荐
相关产品推荐

