BundleFactory - JumeiRdGroup/Parceler GitHub Wiki

使用BundleFactory做数据注入

Parceler提供BundleFactory类做数据双向存取功能。可通过以下api进行获取:

// 此处传入Bundle对象。以供对数据进行注入操作
BundleFactory factory = Parceler.createFactory(bundle);
...
// 在操作完成之后。使用getBundle()方法获取操作后的Bundle实例。
Bundle bundle = factory.getBundle();
// 当设置为null时。则表示将会使用设置的默认转换器。
factory.setConverter(converter);
  • 指定是否强制转换:
// 指定是否强制要求后续通过
factory.setForceConvert(isForce)

然后即可进行对应操作。

  • 添加任意对象数据到Bundle:
factory.put(key, value)
  • 从Bundle中获取出任意对象数据:
factory.get(key, type);

指定转换器的意义在于:

  1. get(key, type):

    当使用get方法从bundle中取数据时。当从bundle中通过指定key取出值的类型,与指定的type类型不一致时。触发转换器converter进行数据转换。转换为指定的type类型并赋值。

  2. put(key, value)

    当使用put方法将数据存入bundle中时。当需要放入bundle中的值value的类型不被bundle所支持时,触发转换器converter进行数据转换,转换为指定的可被bundle所支持的数据类型并放入bundle中。

使用说明

// 存入数据
Bundle source = Parceler.createFactory(new Bundle())
		// 指定使用FastJson作为转换器
		.setConverter(FastJsonConverter.class)
		// 指定是否忽略在存取过程中所出现的异常。忽略即为遇到问题时自动跳过。不会导致crash。推荐使用BuildConfig.DEBUG作为开关
		.ignoreException(ignore)
		// 使用put存入任意对象。当value数据类型不能被直接被放入Bundle中时。触发设置的converter进行转换后存入
		.put(key, value)
		// 设置强制转换
		.setForceConvert(true)
		// 由于设置了强制转换。则此处设置的value。若类型为非基本数据类型时。则将直接触发强制转换。将value通过converter直接先转换后存入
		.put(key, value)
		// 获取存入所有数据的Bundle实例
		.getBundle();
// 读取数据
// 取出传递过来的Bundle数据
Bundle bundle = getBundle();
// 创建Factory。并配置参数
BundleFactory factory = Parceler.createFactory(bundle)
		.ignoreException(BuildConfig.DEBUG);
// 通过Factory从Bundle中读取数据。
A a = factory.get(key, A.class);