0
我有一個類下面,並希望實施Parcelable。 我遇到了錯誤。請指教。Parcelable類
in.readValue(row);
錯誤消息:該方法readValue(類加載器)在類型包裹不適用的參數(ArrayList的)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import android.os.Parcel;
import android.os.Parcelable;
public class cls_datatable implements Parcelable {
private ArrayList<String> column = new ArrayList<String>();
private ArrayList<cls_datarow> row = new ArrayList<cls_datarow>();
private int indexCounter = 0;
private Hashtable<Integer, Integer> IDnIndex = new Hashtable<Integer, Integer>();
public cls_datatable(Parcel in) {
readFromParcel(in);
}
public class cls_datarow {
private ArrayList<String> columnValues;
private int id;
public cls_datarow(int id) {
this.id = id;
columnValues = new ArrayList<String>();
for (int i = 0; i < column.size(); i++)
columnValues.add(null);
}
public cls_datarow() {
columnValues = new ArrayList<String>();
for (int i = 0; i < column.size(); i++)
columnValues.add(null);
}
public int getID() {
return id;
}
public String get(String columnName) {
return columnValues.get(column.indexOf(columnName));
}
public String get(int columnIndex) {
return columnValues.get(columnIndex);
}
public void set(String columnName, String value) {
columnValues.set(column.indexOf(columnName), value);
}
public void set(int columnIndex, String value) {
columnValues.set(columnIndex, value);
}
public int getColumnSize() {
return column.size();
}
}
public void addColumn(String columnName) {
column.add(columnName);
}
// Depreciated function
public void addAllColumns(ArrayList<String> columns) {
column.addAll(columns);
}
public void addAllColumns(String[] columns) {
for (String col : columns) {
column.add(col);
}
}
public int getColumnSize() {
return column.size();
}
public int getColumnIndex(String columnName) {
return column.indexOf(columnName);
}
public int getRowSize() {
return row.size();
}
public cls_datarow getRow(int rowIndex) {
return row.get(rowIndex);
}
public void remove(int rowIndex) {
row.remove(rowIndex);
refreshIDnIndex();
}
public void remove(cls_datarow dataRow) {
row.remove((int) IDnIndex.get(dataRow.getID()));
refreshIDnIndex();
}
public void update(cls_datarow dataRow) {
row.set(IDnIndex.get(dataRow.getID()), dataRow);
}
public void add(cls_datarow row) {
IDnIndex.put(row.getID(), this.row.size());
this.row.add(row);
}
public void addAllRows(ArrayList<cls_datarow> row) {
for (cls_datarow r : row) {
IDnIndex.put(r.getID(), this.row.size());
this.row.add(r);
}
}
public cls_datarow newRow() {
cls_datarow dr = new cls_datarow(indexCounter);
indexCounter++;
return dr;
}
public cls_datatable copy() {
cls_datatable dt = new cls_datatable(null);
dt.addAllColumns(column);
dt.addAllRows(row);
return dt;
}
// inappropriate method
public ArrayList<cls_datarow> getAllRows() {
return row;
}
public void clear() {
row.clear();
}
public cls_datarow[] select(HashMap<String, String> condition) {
ArrayList<cls_datarow> rs = new ArrayList<cls_datarow>();
boolean isMatch = true;
Iterator<String> i;
for (cls_datarow r : row) {
isMatch = true;
i = condition.keySet().iterator();
while (i.hasNext()) {
String key = i.next();
if (r.get(key) == null && condition.get(key) != null)
isMatch = false;
if (r.get(key) != null && condition.get(key) == null)
isMatch = false;
if (r.get(key) != null && condition.get(key) != null
&& !r.get(key).equals(condition.get(key)))
isMatch = false;
}
if (isMatch)
rs.add(r);
}
return rs.toArray(new cls_datarow[rs.size()]);
}
private void refreshIDnIndex() {
IDnIndex.clear();
for (int i = 0; i < row.size(); i++)
IDnIndex.put(row.get(i).getID(), i);
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// We just need to write each field into the
// parcel. When we read from parcel, they
// will come back in the same order
dest.writeStringList(column);
dest.writeValue(row);
dest.writeInt(indexCounter);
dest.writeValue(IDnIndex);
}
private void readFromParcel(Parcel in) {
// We just need to read back each
// field in the order that it was
// written to the parcel
in.readStringList(column);
in.readValue(row);
//indexCounter
//IDnIndex
}
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public cls_datatable createFromParcel(Parcel in) {
return new cls_datatable(in);
}
public cls_datatable[] newArray(int size) {
return new cls_datatable[size];
}
};
}
我的建議是發佈你得到的錯誤。另外,你不應該用in.readValue(row)來啓動代碼。這是沒有意義的。 – Jems 2011-02-24 12:18:00
什麼錯誤?請提供堆棧跟蹤。 – Mudassir 2011-02-24 12:18:16