4

执行此操作时出现空指针异常:

    private String[] foo;

    private void readFromParcel(Parcel in) {
        in.readStringArray(foo);
    }

看来我需要先分配数组。但是我怎么知道它有多大呢?我必须先写大小,然后再读大小吗?不是有一种writeStringArray()方法来为我处理这个问题吗?

来自Android 文档

有多种方法可以读取和写入原始对象的原始数组,通常会写入 4 字节长度,然后是原始数据项。

所以,如果我自己写计数,它会被写两次。必须有某种方法可以做到这一点,而我不负责管理。

4

2 回答 2

5

我知道这不是一个直接的答案,但您可以使用列表 ( ArrayList<String>) 来代替writeList()and createStringArrayList()

或者你可以Parcle#createStringArray()用来获取数组。

于 2011-08-24T18:53:53.023 回答
2

我希望你必须做这样的事情:

private String[] foo;
private void readFromParcel(Parcel in) {
        int cnt = in.readInt();
        foo = new String[cnt];
        in.readStringArray(foo);
    }

这意味着您必须在写出时记录数组的大小。

于 2011-08-24T18:55:17.477 回答