java - Parcelable - ArrayList<String> NullPointerException

标签 java android parcelable

我正在使我的对象可分割,这样我就可以将它与 Intent 一起使用s。我得到了 NullPointerException收到后,我正在阅读对象的内容。最准确的是我的ArrayList<String>的内容。当迭代我的 ArrayList<String> 时它有null所有位置的值(value),因此我的 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];
    }
};

NullPointerException和我的backup_contacts在一起。但是backup_contacts大小正确,但内容均为 null因为我需要阅读 backup_contacts 的内容使用get(position)我收到 null值而不是 String .

问题是,为什么是 Parcelable将空值传递给 ArrayList<String>而不是他真正的弦乐?我该如何修复它?

最佳答案

要读取列表,应该是

backup_contacts = new ArrayList<String>();
in.readList(backup_contacts, null);

Here是文档。

createStringArrayList 的文档说:

Read and return a new ArrayList containing String objects from the parcel that was written with writeStringList(List)

关于java - Parcelable - ArrayList<String> NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433603/

相关文章:

java - Play Framework - JBoss channel 异常

java - 在未修饰的 JFrame 上仅显示关闭按钮

java - Android 开发中如何在没有 BasicNameValuePair 的情况下将数据发送到 PHP 脚本

Android 在 Android 上的 Activity 之间发送 ArrayList<ParseObject> 时出错。包裹 : unable to marshal value com. parse.ParseObject@b308c828 错误

java - 无法保存RelativeLayout的状态

java - 将一个表中的数百万行与另一个表中的数百万行进行比较的最快方法

java - 海量IO操作服务器选择哪种技术

android - 如何重启android avd?

Android 应用程序链接已经过验证。但是,仍然出现消歧对话框

java - 如何将 Bitmap 对象从一个 Activity 传递到另一个 Activity