Parcelable을 통해 오브젝트 배열을 전달하려고합니다. 그러나 전송 한 후, 데이터는 이상한로 변환오브젝트의 분해 가능한 arraylist를 전달하려면
송신 부분 :
for (int i=0; i<res.size(); i++) {
Log.d(LOG_TAG, "id = "+res.get(i).id+" weigth = "+res.get(i).weight);
}
ParcelableProducts Checked = new ParcelableProducts();
Checked.setList(res);
intent.putExtra(ParcelableProducts.class.getCanonicalName(), Checked);
수신 부분 :
ParcelableProducts res = (ParcelableProducts) data.getParcelableExtra(ParcelableProducts.class.getCanonicalName());
ArrayList<prProduct> prod = res.prod;
for (int i=0; i<prod.size(); i++) {
Log.d(LOG_TAG, "id = "+prod.get(i).id+" weigth = "+prod.get(i).weight);
}
클래스의 ArrayList와 Parcelable :
public class ParcelableProducts implements Parcelable {
final private static String LOG_TAG = "ParcelableProducts";
public ArrayList<prProduct> prod;
public ParcelableProducts() {
prod = new ArrayList<prProduct>();
}
public void setList(ArrayList<prProduct> _prod){
prod = _prod;
}
public ArrayList<prProduct> getList() {
return prod;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeList(prod);
}
public static final Parcelable.Creator<ParcelableProducts> CREATOR = new Parcelable.Creator<ParcelableProducts>() {
public ParcelableProducts createFromParcel(Parcel in) {
return new ParcelableProducts(in);
}
public ParcelableProducts[] newArray(int size) {
return new ParcelableProducts[size];
}
};
private ParcelableProducts(Parcel parcel) {
prod = new ArrayList<prProduct>();
parcel.readTypedList(prod, prProduct.CREATOR);
}
}
및 prProduct :
전송 : 로그
public class prProduct implements Parcelable { final static String LOG_TAG = "prProduct"; public float weight; public int id; public prProduct(int _id, Float _weight) { weight = _weight; id = _id; } public int describeContents() { return 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeFloat(weight); parcel.writeInt(id); } public static final Parcelable.Creator<prProduct> CREATOR = new Parcelable.Creator<prProduct>() { public prProduct createFromParcel(Parcel in) { return new prProduct(in); } public prProduct[] newArray(int size) { return new prProduct[size]; } }; private prProduct(Parcel parcel) { weight = parcel.readFloat(); id = parcel.readInt(); } }
ID = 7 weigth = 0.0
받아 봐 : ID = 7,602,278 weigth = 4.2E-44 핸드 오프
'prProduct' 클래스가 더 복잡해지지 않으면'Parcelable' 대신'Serializable'으로 바꾸지 않으시겠습니까? 'ArrayList' 또한'Serializable'이기 때문에 모든 것이 잘 작동합니다. 이것이 옵션인지 알려 주시면 어떻게하는지 자세히 설명하는 답변을 게시하겠습니다. – MCeley
소포를 만든 직후에 소포 읽기를 시도하십시오. 문제를 지역화하는 데 도움이됩니다. 소포 읽기/작성 또는 활동간에 소포를 전송하는 것입니까? – tbkn23
MCeley, 하나의 실수와 하나의 실수를 전달해야합니다. – ftp27