2015-12-19 3 views
2

Можно ли написать null на номер Parcel при пересылке объекта, и получить null еще раз, когда его снова освободят?Может ли Nulls передаваться посылки?

Давайте предположим, что мы имеем следующий код:

public class Test implements Parcelable { 
    private String string = null; 
    public Test(Parcel dest, int flags) { 
     source.writeString(string); 
    } 
} 

Могу ли я получить NullPointerException при чтении этого значения обратно от посылки с использованием Parcel.readString()?

Или я получу значение null?

ответ

10

Да, вы можете передать null методу Parcel.writeString(String).

Когда вы снова прочитаете его с Parcel.readString(), вы получите значение null.


Например, предположим, что у вас есть класс со следующими полями в нем:

public class Test implements Parcelable { 
    public final int id; 
    private final String name; 
    public final String description; 
    ... 

Вы создаете Parcelable реализации, как это (с помощью Android Studio autoparcelable инструмент):

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(id); 
    dest.writeString(null); // NOTE the null value here 
    dest.writeString(description); 
} 

protected Test(Parcel in) { 
    id = in.readInt(); 
    name = in.readString(); 
    description = in.readString(); 
} 

При запуске этого кода и передаче объекта Test a са Parcelable дополнительный в Intent, 2 балла становится очевидным:

  1. код работает отлично без NullPointerException
  2. deserialised Test объекта имеет значение name == null

Вы можете увидеть аналогичная информация в комментариях к этому вопросу:

+1

Это именно поведение я ожидал! Спасибо за исправления. – Fattum

-1

В моем случае (Котлин)

override fun writeToParcel(parcel: Parcel, flags: Int) { 
     parcel.writeInt(if (PapperId == null) -1 else PapperId) 
     parcel.writeString(if (Nome == null) "" else Nome) 
} 
Смежные вопросы