2015-02-23 40 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