Android 有意发送嵌套的包裹
我正试图发送一个包裹对象,其中还包含另一个有意图的包裹对象。然而,我得到了null指针异常。你能告诉我哪里做错了吗 A.javaAndroid 有意发送嵌套的包裹,android,parcelable,Android,Parcelable,我正试图发送一个包裹对象,其中还包含另一个有意图的包裹对象。然而,我得到了null指针异常。你能告诉我哪里做错了吗 A.java public class A implements Parcelable { private ArrayList<B> var; public A() { this.var = new ArrayList<B>(); } public void addToB(B b)
public class A implements Parcelable {
private ArrayList<B> var;
public A()
{
this.var = new ArrayList<B>();
}
public void addToB(B b)
{
var.add(b);
}
public ArrayList<B> getB() {
return var;
}
public void setB(ArrayList<B> b) {
this.var = b;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(this.var);
}
private A (Parcel in){
in.readTypedList(this.var, B.CREATOR);
}
public static final Parcelable.Creator<A> CREATOR = new Parcelable.Creator<A>() {
public A createFromParcel(Parcel in) {
return new A(in);
}
public A[] newArray(int size) {
return new A[size];
}
};
}
我收到的包裹是这样的:
Intent i = new Intent(Bla.this, Blabla.class);
i.putExtra("info", objectA);
startActivity(i);
Intent i = getIntent();
ObjectA ci = (ObjectA)i.getParcelableExtra("info");
您没有将数据分配给构造函数中的
var
变量
像这样改变它
private A (Parcel in){
var=(ArrayList)in.readTypedList(this.var, B.CREATOR);
}
编辑::
像这样更改代码,然后重试
@Override
public void writeToParcel(Parcel dest, int flags) {
B[] data = new B[var.size()];
for (int i = 0; i < data.length; i++) {
data[i] = var.get(i);
}
dest.writeParcelableArray(data, flags);
}
public A(Parcel in) {
Parcelable[] parcelables = in.readParcelableArray(Thread
.currentThread().getContextClassLoader());
ArrayList<B> list = new ArrayList<B>();
for (Parcelable parcelable : parcelables) {
list.add((B) parcelable);
}
var = list;
}
@覆盖
公共无效写入包裹(包裹目的地,内部标志){
B[]数据=新的B[var.size()];
对于(int i=0;i
您必须在以下位置实例化ArrayList:
private A (Parcel in){
var = new ArrayList<B>();
in.readTypedList(this.var, B.CREATOR);
}
private A(包裹中){
var=新的ArrayList();
in.readTypedList(this.var,B.CREATOR);
}
说它是否有效:)
您在分析arraylist时遇到问题。。。做这些改变
到
及
到
上面说不能从void转换到ArrayList。你知道什么是null吗?(放置Logcat)谢谢,在实例化之后,它工作了。我在访问令牌上遇到了问题,所以这就是为什么它一开始不工作的原因。谢谢,但它在readTypedList和writeTypedList上工作。问题正在实例化。感谢您发布代码。这对我创建嵌套包裹非常有帮助!也可以看看这个网站,它会自动为你创建包裹!!!查看这篇帖子:了解更多详情
private A (Parcel in){
var = new ArrayList<B>();
in.readTypedList(this.var, B.CREATOR);
}
private A (Parcel in){
in.readTypedList(this.var, B.CREATOR);
}
this.var=in.readArrayList(B.class.getClassLoader());
public void writeToParcel(Parcel dest, int flags) {
dest.writeTypedList(this.var);
}
dest.writeList(this.var);