2012-08-25 27 views
26

Tôi không thể tìm thấy giải pháp nào về cách xử lý với dãy số nguyên trong trường hợp bưu kiện (Tôi muốn sử dụng hai hàm này dest.writeIntArray (storeId);in.readIntArray (storeId);).Đọc và viết mảng nguyên vào bưu kiện

Đây là mã của tôi

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]; 
     } 
      };  
} 

Trả lời

52

Khi tôi sử dụng "in.readIntArray(storeID)", tôi nhận được một lỗi:

"Nguyên nhân: java.lang.NullPointerException tại android.os.Parcel.readIntArray (Parcel.java:672) ".

Thay vì sử dụng "readIntArray" Tôi sử dụng như sau:

storeID = in.createIntArray(); 

Bây giờ không có lỗi.

+0

Cảm ơn. Tôi sẽ cố gắng này và sau đó cho bạn biết. –

+1

Cảm ơn. Nó làm việc cho tôi. – anivaler

+3

Cảm ơn. Đã có cùng một vấn đề với readFloatArray (...) và createFloatArray() đã giải quyết nó. – PeterVanPansen

0

Tôi giả định rằng lớp MyObj triển khai Khớp và thực hiện tất cả các phương thức được yêu cầu; Tôi sẽ đề nghị ở đây chỉ các chi tiết về đọc/viết bưu kiện.

Nếu kích thước mảng được biết đến trước đó:

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); 
} 

Nếu không:

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

Sẽ gây ra sự cố trên thiết bị Samsung sử dụng câu trả lời ở trên –

Các vấn đề liên quan