Как узнать, насколько велик размер массива для Parcel.readStringArray ()? - PullRequest
4 голосов
/ 24 августа 2011

Я получаю исключение нулевого указателя, когда я делаю это:

    private String[] foo;

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

Кажется, мне нужно сначала выделить массив.Но откуда мне знать, как это сделать?Должен ли я сначала написать размер, а затем сначала прочитать размер?И разве нет смысла иметь метод writeStringArray(), чтобы справиться с этим для меня?

Из Документации Android :

Существует множествометоды для чтения и записи необработанных массивов примитивных объектов, которые обычно приводят к записи 4-байтовой длины, за которой следуют примитивные элементы данных.

Итак, если я сам пишу счетчик, он записывается дважды,Должен быть какой-то способ сделать это, если я не отвечаю за это.

Ответы [ 2 ]

5 голосов
/ 24 августа 2011

Я знаю, что это не прямой ответ, но вы можете использовать списки (ArrayList<String>) вместо writeList() и createStringArrayList().

Или вы можете использовать Parcle#createStringArray() чтобы получить массив.

2 голосов
/ 24 августа 2011

Я ожидаю, что вам придется сделать что-то вроде этого:

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

, что означает, что вы должны записывать размер массива при записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...