我有一个Object,我需要能够在Activites之间传递。它实现了Parcelable,我编写了与之相关的所有代码。
问题是Object的一个属性是Drawable - 而且确实需要。不幸的是,Drawable既不是Parcelable也不是Serializable。我不明白如何通过它。
拥有Drawable的原因是我需要在运行时缓存我从互联网上下载的图像。我不想在文件系统上缓存图像,因为这可能最终会占用大量空间。
我将图像放入Drawable中,以便我可以轻松地将其放入ImageView。
任何想法?
答案 0 :(得分:1)
在您的申请中:
HashMap<String,Object> tempObjects = new H....
public Object getTempObject(String key) {
Object o = null;
o = tempObjects.get(key);
tempObjects.remove(key);
return o;
}
public void addTempObject(String key, Object object) {
tempObjects.put(key, object);
}
并在返回途中将Object转换为Drawable。你也可以在get()中添加一个布尔参数,如果它是真的,就从地图中删除它,这样你可以多次访问某个临时对象,或者如果你确定你赢了就立即删除它在那里需要它
编辑:对于异常捕获,很抱歉,我从一个函数中粘贴代码,我有一个HashMap<Class<?>, HashMap<String, Object>>
来获取更详细的临时对象getter,其中我将一个hashMap作为值,然后从中获取Object它,这就是我首先粘贴的代码中有NPE检查的原因
答案 1 :(得分:1)
您可以将drawable转换为byte [],然后以这种方式传递它(包裹它)。
答案 2 :(得分:1)
您可以将unParcelable数据存储在自定义ContentProvider中,然后将uri引用传递给它。
答案 3 :(得分:0)
您无法在活动之间传递非Serializable
或Parcelable
的复杂对象。一种选择是将图片缓存在自定义Application
课程中,然后从您的活动中访问这些图片。
MyApplication application = (MyApplication)getAppliction();
Drawable drawable = application.getCachedDrawable();