2015-02-23 35 views
0

我有一个可发布的类,它试图发送一些相机预览信息。所以我需要将几个byte []数据从一个活动发送到另一个活动。我使用Parcelable与此代码:在活动之间分享大量数据

public class CameraResult implements Parcelable 
{ 
    private byte[] imagesList; 

    public CameraResult() {} 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeByteArray(imagesList); 
    } 

    public byte[] getImageList() { 
     return imagesList; 
    } 

    public void setImageList(byte[] results) { 
     this.imagesList = results; 
    } 


public static final Parcelable.Creator<CameraResult> CREATOR = new Creator<CameraResult>() { 

    @Override 
    public CameraResult[] newArray(int size) { 
     return new CameraResult[size]; 
    } 

    @Override 
    public CameraResult createFromParcel(Parcel source) { 
     CameraResult toReturn = new CameraResult(); 

     int imageListSize = source.readInt(); 
     if (imageListSize != 0) 
     { 
      byte[] tempImageList = new byte[imageListSize]; 
      source.readByteArray(tempImageList); 
      toReturn.setImageList(tempImageList); 
     } 

     return toReturn; 
    } 
}; 
} 

Parcelable类是工作的罚款。但是,当我尝试发送更大量的数据时,通信Intent不起作用,因为我超过了最大数据大小。

我读了this linkthis other link与一些假设的方式来解决我的问题。但我想知道是否有可能使用Parcelable来发送更多的数据,如果不能,那么上述哪种方式是最合适的。

谢谢。

+1

作为一个建议,为什么你不使用2个片段与一个共同的活动?这样你不能使用这种形式的沟通活动,并且不会有任何发送涉及。\ – Droidekas 2015-02-23 08:52:40

+0

片段是不是因为某些原因,我为什么我放弃他们。 – Sonhja 2015-02-23 09:23:41

回答

2

使用单例或静态类来存储共享数据。


编辑:

根据我的经验,那是那么痛苦的方式做这样的事情,而且,还可以,第一个链接你的贴吧说:

有通过定义全局变量 变量,静态字段,成员变量等来实现此目的的几个建议。为了获得干净的封装代码,我调整了这些 的代码,我决定使用Java枚举实现它 。

它采用了enum为DataHolder:

private enum DataHolder { 
    INSTANCE; 

    private List<Object> mObjectList; 

    public static boolean hasData() { 
     return INSTANCE.mObjectList != null; 
    } 

    public static void setData(final List<Object> objectList) { 
     INSTANCE.mObjectList = objectList; 
    } 

    public static List<Object> getData() { 
     final List<Object> retList = INSTANCE.mObjectList; 
     INSTANCE.mObjectList = null; 
     return retList; 
    } 
} 

我个人更喜欢实现一个Singleton类的代码似乎是在不同的类(我有点痴迷与)更整齐,但基本上是一样的。任何其他解决方案也可以。

+0

所以,你推荐我连接的解决方案之一,没有办法实现共享大数据量的'Parcelable'? – Sonhja 2015-02-23 09:24:17

+0

这是一个正确的答案,它不是一个很好的解决方案来存储活动,片段或视图内的数据 – mes 2015-02-23 09:29:45

+0

我编辑我的答案,答复有点大。 – 2015-02-23 09:39:08