Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
63 lines (50 sloc) 1.94 KB

昨天又改出 Parcel秘制bug,
Retrofit 需要使用 到 RequestHeader/RequestBody 或者 ResponseBody 作为 传输实体.
别人写的代码, 看了一眼, 发现 某些成员的类型 居然使用了 Long 而不是 long.
其对应的 RecyclerViewViewHolder 用的 MyModel 里面一样的, 也是 Long.
哎 于是乎 问题来了, MyModel 先进行 Parcelable 化, 然后 Intent 传递 这个 MyModel,
发现 里面的 Long 类型 都没有传递过来, 都是 null.
于是 直接看了 MyModel 的 源代码, 看了一下, 卧槽,
发现 MyModelMyModel(Parcel in)writeToParcel(Parcel dest, int flags) 里面,
根本就没有 关于 Long 的 操作. 即:

private String stringValue;
private Long wrappedLongValue;

// region [Getters & Setters]
// endregion

protected MyModel(Parcel in) {
    stringValue = in.readString();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(stringValue);
}

于是乎 下意识 把 Long 换成了 long, 重新生成了 Getters & Setters,
目的是为了 不让 出现 如下的 空指针异常:

Long none = null;
long myAge = none;

然后 卧槽, AS 自动生成了 long 相关的操作, 真是 坑爹啊.
然后 又卧槽, 居然 Retrofix 那头取不到数据了...
改成 long 我靠, 立竿见影, 真是出鬼了...

哎, 最后, 暂时 还是用了 Long,
但是在 要 把 MyModel(Parcel in)writeToParcel(Parcel dest, int flags)
手动写上 需要的代码, 大坑啊:

private String stringValue;
// private long longValue;
private Long wrappedLongValue;

// region [Getters & Setters]
// endregion

protected MyModel(Parcel in) {
    stringValue = in.readString();
    wrappedLongValue = in.readLong();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(stringValue);
    dest.writeLong(longValue);
}