返回介绍

Bundle 的 put 与 get 方法族

发布于 2024-12-23 21:42:44 字数 4033 浏览 0 评论 0 收藏 0

Bundle 的功能是用来保存数据,那么必然提供了一系列存取数据的方法,这些方法太多了,几乎能够存取任何类型的数据,具体整理为下表:

相关保存方法相关读取方法
public void putBoolean(String key, boolean value)public boolean getBoolean(String key)
public void putByte(String key, byte value)public byte getByte(String key)
public void putChar(String key, char value)public char getChar(String key)
public void putShort(String key, short value)public short getShort(String key)
public void putFloat(String key, float value)public float getFloat(String key)
public void putCharSequence(String key, CharSequence value)public CharSequence getCharSequence(String key)
public void putParcelable(String key, Parcelable value)public T getParcelable(String key)
public void putSize(String key, Size value)public Size getSize(String key)
public void putSizeF(String key, SizeF value)public SizeF getSizeF(String key)
public void putParcelableArray(String key, Parcelable[] value)public Parcelable[] getParcelableArray(String key)
public void putParcelableArrayList(String key, ArrayList<? extends Parcelable> value)public ArrayList getParcelableArrayList(String key)
public void putSparseParcelableArray(String key, SparseArray<? extends Parcelable> value)public SparseArray getSparseParcelableArray(String key)
public void putIntegerArrayList(String key, ArrayList value)public ArrayList getIntegerArrayList(String key)
public void putStringArrayList(String key, ArrayList value)public ArrayList getStringArrayList(String key)
public void putCharSequenceArrayList(String key, ArrayList value)public ArrayList getCharSequenceArrayList(String key)
public void putSerializable(String key, Serializable value)public Serializable getSerializable(String key)
public void putBooleanArray(String key, boolean[] value)public boolean[] getBooleanArray(String key)
public void putByteArray(String key, byte[] value)public byte[] getByteArray(String key)
public void putShortArray(String key, short[] value)public short[] getShortArray(String key)
public void putCharArray(String key, char[] value)public char[] getCharArray(String key)
public void putFloatArray(String key, float[] value)public float[] getFloatArray(String key)
public void putCharSequenceArray(String key, CharSequence[] value)public CharSequence[] getCharSequenceArray(String key)
public void putBundle(String key, Bundle value)public Bundle getBundle(String key)
public void putBinder(String key, IBinder value)public IBinder getBinder(String key)

除了上述存取数据涉及到的方法外,Bundle 还提供了一个 clear 方法: public void clear() ,该方法可用于移除 Bundle 中的所有数据。

Bundle 之所以能以键值对的方式存储数据,实质上是因为它内部维护了一个 ArrayMap,具体定义是在其父类 BaseBundle 中:

ArrayMap<String, ObjectmMap = null;

ArrayMap 比 HashMap 更加高效、更加节省内存,它的初始化是在 Bundle 的构造方法中实现的,源码如下:

BaseBundle(ClassLoader loader, int capacity) {
  mMap = capacity > 0 ?
      new ArrayMap<String, Object>(capacity) : new ArrayMap<String, Object>();
  mClassLoader = loader == null ? getClass().getClassLoader() : loader;
}

另外还可以发现,存储数据用的 key 都是 String 类型,值为各种数据类型,甚至可以存储 Bundle、Binder 等,如果 ArrayMap 中存在相同的 key,则会替换掉之前的对应值。每一个 put 方法都对应一个 get 方法,对于基本数据类型还可以设置缺省值(上述表中未列出对应方法)。具体的存取则是在其父类 BaseBundle 中实现的,下面就以布尔类型数据为例来分析一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文