需要在活动之间传递不可分割的对象

时间:2010-11-17 17:10:38

标签: android

我有一个Object,我需要能够在Activites之间传递。它实现了Parcelable,我编写了与之相关的所有代码。

问题是Object的一个属性是Drawable - 而且确实需要。不幸的是,Drawable既不是Parcelable也不是Serializable。我不明白如何通过它。

拥有Drawable的原因是我需要在运行时缓存我从互联网上下载的图像。我不想在文件系统上缓存图像,因为这可能最终会占用大量空间。

我将图像放入Drawable中,以便我可以轻松地将其放入ImageView。

任何想法?

4 个答案:

答案 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 [],然后以这种方式传递它(包裹它)。

Drawable to byte[]

答案 2 :(得分:1)

您可以将unParcelable数据存储在自定义ContentProvider中,然后将uri引用传递给它。

答案 3 :(得分:0)

您无法在活动之间传递非SerializableParcelable的复杂对象。一种选择是将图片缓存在自定义Application课程中,然后从您的活动中访问这些图片。

MyApplication application = (MyApplication)getAppliction();
Drawable drawable = application.getCachedDrawable();