今天回顾上周的一些开发任务,结合主管审查代码之后提出的一些建议,对代码进行一些整理,看到一条这样的:
1 2 3 4 5
| import com.google.gson.annotations.SerializedName data class CurrencReviewEntity(
|
原来的代码中使用了 SerializedName
注解来对 JSON 数据实体类进行映射,主管给出的建议中要求使用 Parcelable 接口来实现
我打开实体类点了几次 Option + T
没有任何反应,原来是要再下载一个插件 Android Parcelable code generator
,遂打开 AS 的 preferences,然后查找插件进行下载:
却弹出了如下错误:
懒得去设置代理地址了,所以直接去 Jetbrains 的插件官网 搜索下载好,然后解压到 AS/Contents/plugins 目录下
然后再重启 AS,大功告成,我们可以点击实体类名右侧的空白,用快捷键自动补全试试:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| @Keep data class TickerCommentResponse ( @SerializedName("success") var success: Boolean, @SerializedName("error") var error: String, @SerializedName("errorCode") var errorCode: Int, @SerializedName("data") var data: TickerCommentBean ) : Parcelable { constructor(parcel: Parcel) : this( parcel.readByte() != 0.toByte(), parcel.readString(), parcel.readInt(), TODO("data") ) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeByte(if (success) 1 else 0) parcel.writeString(error) parcel.writeInt(errorCode) }
override fun describeContents(): Int { return 0 }
companion object CREATOR : Parcelable.Creator<TickerCommentResponse> { override fun createFromParcel(parcel: Parcel): TickerCommentResponse { return TickerCommentResponse(parcel) }
override fun newArray(size: Int): Array<TickerCommentResponse?> { return arrayOfNulls(size) } } }
|
因为这里的 TickerCommentBean 是另一个实体类,所以我们再把 constructor 处修改好就可以了:
1 2 3 4 5 6
| constructor(parcel: Parcel) : this( parcel.readByte() != 0.toByte(), parcel.readString(), parcel.readInt(), parcel.readParcelable(TickerCommentBean::class.java.classLoader) )
|
注意这里的 TickerCommentBean 也需要实现 Parcelable 接口,否则报错
到最后发现原来只是快捷键不一样,其实并不需要下载插件就可以直接自动实现 Parcelable 接口