Android 数据传递出现的android.os.TransactionTooLargeException问题

开发中在页面跳转中经常需要徐携带数据到另一个页面,常用的是intent传递,然而在intent的Bundle等传递数据时有一个缓冲区,而这个缓冲区最大只有1MB,当数据大于这个值时就会出现android.os.TransactionTooLargeException问题,这时就不能用intent来传递数据了,可以使用WeakReference来暂时保存数据,具体的解决方法为:


WeakDataHolder 类:

package cn.longmaster.hospital.doctor.ui.consult;

import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by W·H·K on 2017/10/24.
 */

public class WeakDataHolder {
    private static WeakDataHolder instance;

    public static WeakDataHolder getInstance(){
        if(instance == null){
            synchronized (WeakDataHolder.class) {
                if (instance == null) {
                    instance = new WeakDataHolder();
                }
            }
        }
        return instance;
    }

    private Map<String, WeakReference<Object>> map = new HashMap<>();

    /**
     * 数据存储
     * @param id
     * @param object
     */
    public void saveData(String id, Object object) {
        map.put(id, new WeakReference<>(object));
    }

    /**
     * 获取数据
     * @param id
     * @return
     */
    public Object getData(String id) {
        WeakReference<Object> weakReference = map.get(id);
        return weakReference.get();
    }
}

这个类中提供了两个方法:

在需要携带数据的时候,调用WeakDataHolder.getInstance().saveData("", object);(两个参数,第一个是map的key,

第二个是需要传递的数据,支持所有的数据类型);

在第二个页面需要获取的时候调用:

WeakDataHolder.getInstance().getData("");得到数据并转换为需要的类型即可。

如:int aa=(int)WeakDataHolder.getInstance().getData("")





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值