2012-08-25 81 views
26

我無法找到如何使用整數數組包裹的情況下處理任何解決方案(我想用這兩個函數dest.writeIntArray(STOREID);in.readIntArray( storeId);)。讀寫整型數組來包裹

這裏是我的代碼

public class ResponseWholeAppData implements Parcelable { 
    private int storeId[]; 

    public int[] getStoreId() { 
     return storeId; 
    } 

    public void setStoreId(int[] storeId) { 
     this.storeId = storeId; 
    } 

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

    public ResponseWholeAppData(){ 
     storeId = new int[2]; 
     storeId[0] = 5; 
     storeId[1] = 10; 
    } 

    public ResponseWholeAppData(Parcel in) { 

     if(in.readByte() == (byte)1) 
      in.readIntArray(storeId); //how to do this storeId=in.readIntArray(); ?       
     } 

    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     if(storeId!=null&&storeId.length>0)     
     { 
      dest.writeByte((byte)1); 
      dest.writeIntArray(storeId); 
     } 
     else 
      dest.writeByte((byte)0); 

    } 
    public static Parcelable.Creator<ResponseWholeAppData> getCreator() { 
     return CREATOR; 
    } 

    public static void setCreator(Parcelable.Creator<ResponseWholeAppData> creator) { 
     CREATOR = creator; 
    } 

    public static Parcelable.Creator<ResponseWholeAppData> CREATOR = new Parcelable.Creator<ResponseWholeAppData>() 
      { 
     public ResponseWholeAppData createFromParcel(Parcel in) 
     { 
      return new ResponseWholeAppData(in); 
     } 
     public ResponseWholeAppData[] newArray(int size) 
     { 
      return new ResponseWholeAppData[size]; 
     } 
      };  
} 

回答

52

當我使用 「in.readIntArray(storeID)」,我得到一個錯誤:顯示java.lang.NullPointerException 在android.os.Parcel.readIntArray:

「所致(Parcel.java:672)「

而不是使用 「readIntArray」 我用下面的:

storeID = in.createIntArray(); 

現在有沒有錯誤。

+0

感謝。我會嘗試這個,然後讓你知道。 –

+1

謝謝。這個對我有用。 – anivaler

+3

謝謝。如果readFloatArray(...)和createFloatArray()解決了同樣的問題。 – PeterVanPansen

0

我假設MyObj類實現了Parcelable並實現了所有必需的方法;我只在這裏建議閱讀/書寫包裹的細節。

如果數組的大小是預先已知的:

public void writeToParcel(Parcel out, int flags) { 
    super.writeToParcel(out, flags); 
    out.writeIntArray(mMyIntArray);  // In this example array length is 4 
} 

protected MyObj(Parcel in) { 
    super(in); 
    mMyIntArray = new int[4]; 
    in.readIntArray(mMyIntArray); 
} 

否則:

public void writeToParcel(Parcel out, int flags) { 
    super.writeToParcel(out, flags); 
    out.writeInt(mMyArray.length);  // First write array length 
    out.writeIntArray(mMyIntArray);  // Then array content 
} 

protected MyObj(Parcel in) { 
    super(in); 
    mMyIntArray = new int[in.readInt()]; 
    in.readIntArray(mMyIntArray); 
} 
+0

會導致三星設備上的崩潰使用上述答案 –