我正在尝试读取字符串列表,并且我一直有以下错误:
使用以下Parcelable类:
import java.util.List;
import android.os.Parcel;
import android.os.Parcelable;
public class ActivePolicies implements Parcelable {
private List<String> activePolicies;
public ActivePolicies(List<String> activePolicies) {
this.activePolicies = activePolicies;
}
public List<String> getActivePolicies(){
return activePolicies;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringList(activePolicies);
}
public static final Parcelable.Creator<ActivePolicies> CREATOR = new Parcelable.Creator<ActivePolicies>() {
@Override
public ActivePolicies createFromParcel(Parcel in) {
try {
return new ActivePolicies(in.createStringArrayList());
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public ActivePolicies[] newArray(int size) {
return new ActivePolicies[size];
}
};
}
它一直在createFromParcel()
给我一个例外,但我无法弄明白为什么
它似乎是一个简单的parcelable,但是当我在Parcel类的readStringList()
调试时,列表为空。
但是当我在createStringArrayList()
返回之前对其进行评估时,列表中存在预期的值。
答案 0 :(得分:0)
您需要创建接受Parcel的构造函数
public ActivePolicies(Parcel in) {
in.readStringList(activePolicies);
}
答案 1 :(得分:0)
in.createStringArrayList()
?为什么要在构造对象时创建新的String列表?
使用此方法。
Parcel.readStringList(List<String> list)
读入给定的List项目使用的String对象 当前dataPosition()的writeStringList(List)。
推荐:实现一个接受Parcel
的构造函数,然后选择一个readFromParcel
方法。
public class ActivePolicies implements Parcelable {
private List<String> activePolicies;
public ActivePolicies() {
activePolicies = new ArrayList<String>();
}
public ActivePolicies(Parcel in) {
this();
readFromParcel(in);
}
private void readFromParcel(Parcel in) {
in.readStringList(activePolicies);
}
在创作者中。
return new ActivePolicies(in);