我如何知道为Parcel.readStringArray()创建数组有多大?

时间:2011-08-24 18:46:55

标签: android parcel

当我这样做时,我得到一个空指针异常:

    private String[] foo;

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

我似乎需要先分配数组。但我怎么知道它有多大?我是否必须首先编写尺寸然后先读取尺寸?并不是有writeStringArray()方法为我处理这个问题?

来自Android Documentation

  

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

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

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

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