Java 包裹-ArrayList<;字符串>;空指针异常

Java 包裹-ArrayList<;字符串>;空指针异常,java,android,parcelable,Java,Android,Parcelable,我正在将我的对象包裹起来,这样我就可以有Intents使用它。我收到一个NullPointerException时,我正在读取对象的内容。最准确的是我的ArrayList的内容。当在myArrayList上迭代时,它在所有位置都有null值,因此myNullPointerException 这是我的Parcelable课程: public class PhoneBackup implements Parcelable{ public Integer id; public Long ts; pu

我正在将我的对象包裹起来,这样我就可以有
Intent
s使用它。我收到一个
NullPointerException
时,我正在读取对象的内容。最准确的是我的
ArrayList
的内容。当在my
ArrayList上迭代时,它在所有位置都有
null
值,因此my
NullPointerException

这是我的
Parcelable
课程:

public class PhoneBackup implements Parcelable{

public Integer id;
public Long ts;
public String device_name;
public String device_manufacturer;
public String device_model;
public Integer backup_contacts_count;
public String description;
public ArrayList<String> backup_contacts;

public PhoneBackup()
{

}


public PhoneBackup(Parcel pc){
//      backup_contacts = new ArrayList<String>(); // Tried this way, still NPE

    id = pc.readInt();
    ts =  pc.readLong();
    device_name = pc.readString();
    device_manufacturer = pc.readString();
    device_model = pc.readString();
    backup_contacts_count = pc.readInt();
    description = pc.readString();
//      pc.readStringList(backup_contacts); // Tried this way, still NPE
    backup_contacts = pc.createStringArrayList();
}

// (getters and setters)

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(id);
    dest.writeLong(ts);
    dest.writeString(device_name);
    dest.writeString(device_manufacturer);
    dest.writeString(device_model);
    dest.writeInt(backup_contacts_count);
    dest.writeString(description);
    dest.writeList(backup_contacts);

}

/** Static field used to regenerate object, individually or as arrays */
public static final Parcelable.Creator<PhoneBackup> CREATOR = new Parcelable.Creator<PhoneBackup>() {
    public PhoneBackup createFromParcel(Parcel pc) {
        return new PhoneBackup(pc);
    }
    public PhoneBackup[] newArray(int size) {
        return new PhoneBackup[size];
    }
};
public类PhoneBackup实现可打包{
公共整数id;
公共长征;
公共字符串设备名称;
公共字符串设备制造商;
公共字符串设备_模型;
公共整数备份\u联系人\u计数;
公共字符串描述;
公共阵列列表备份联系人;
公用电话备份()
{
}
公用电话备份(包裹pc){
//backup_contacts=new ArrayList();//尝试了这种方法,仍然是NPE
id=pc.readInt();
ts=pc.readLong();
设备名称=pc.readString();
设备制造商=pc.readString();
device_model=pc.readString();
备份_联系人_计数=pc.readInt();
description=pc.readString();
//pc.readStringList(备份联系人);//尝试了这种方法,仍然是NPE
backup_contacts=pc.createStringArrayList();
}
//(接球手和接球手)
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的地写入(id);
目的地记录(ts);
目的写入目录(设备名称);
目的地记录(设备制造商);
目的写入限制(设备型号);
目的地写入(备份联系人计数);
目的地记录(说明);
目标写入列表(备份联系人);
}
/**用于单独或作为数组重新生成对象的静态字段*/
public static final Parcelable.Creator=新建Parcelable.Creator(){
公用电话备份createFromParcel(Parcel pc){
返回新的电话备份(pc);
}
公用电话备份[]新阵列(整数大小){
返回新的PhoneBackup[大小];
}
};
NullPointerException
与我的
backup\u联系人一起出现。但是
backup\u联系人的大小正确,但是容器都是
null
,因为我需要使用
get(position)读取
backup\u联系人的内容
我收到一个
null
值,而不是
字符串


问题是,为什么
Parcelable
ArrayList
传递空值,而不是实际的字符串?我如何修复它?

要读取它应该是的列表

backup_contacts = new ArrayList<String>();
in.readList(backup_contacts, null);
backup_contacts=new ArrayList();
in.readList(备份联系人,空);
是文档

createStringArrayList
的文档说明:

从中读取并返回包含字符串对象的新ArrayList 使用writeStringList(列表)写入的包裹


要阅读列表,它应该是

backup_contacts = new ArrayList<String>();
in.readList(backup_contacts, null);
backup_contacts=new ArrayList();
in.readList(备份联系人,空);
是文档

createStringArrayList
的文档说明:

从中读取并返回包含字符串对象的新ArrayList 使用writeStringList(列表)写入的包裹


我认为问题可能在于写信给包裹:

dest.writeList(backup_contacts);
应该是

backup_contacts = new ArrayList<String>();
in.readList(backup_contacts, null);
dest.writeStringList(backup_contacts);
API中添加的公共最终作废writeStringList(List val) 一级

将包含字符串对象的列表展平到地块中,位于 如果需要,当前dataPosition()和不断增长的dataCapacity()。它们可以 稍后将使用createStringArrayList()或 readStringList(列表)


我认为问题可能在于写信给包裹:

dest.writeList(backup_contacts);
应该是

backup_contacts = new ArrayList<String>();
in.readList(backup_contacts, null);
dest.writeStringList(backup_contacts);
API中添加的公共最终作废writeStringList(List val) 一级

将包含字符串对象的列表展平到地块中,位于 如果需要,当前dataPosition()和不断增长的dataCapacity()。它们可以 稍后将使用createStringArrayList()或 readStringList(列表)


如果出现异常,请始终在问题中包含logcat。我理解您的评论,但stacktrace在这里是毫无用处的,因为它指向我的应用程序方法,而没有提到我开发的库的
PhoneBackup
类。我只是通过多次调试手动跟踪NPE到
PhoneBackup
如果出现异常,请在您的问题中加入logcat。我理解您的评论,但stacktrace在这里是毫无用处的,因为它指向我的应用程序方法,而没有提到我开发的库的
PhoneBackup
类。我只是通过多次调试手动跟踪NPE到
PhoneBackup