TransactionTooLargeException

作者:A_mnesia
来源:CSDN
原文:https://blog.csdn.net/m13984458297/article/details/78330419

开发中在页面跳转中经常需要徐携带数据到另一个页面,常用的是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("")

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容