AS 下载插件 | 使用 Parcelable 接口

今天回顾上周的一些开发任务,结合主管审查代码之后提出的一些建议,对代码进行一些整理,看到一条这样的:

1
2
3
4
5
import com.google.gson.annotations.SerializedName
data class CurrencReviewEntity(

// 可以考虑替换为实现 Parcelable 接口
// 新写的实体类,如果不是工具生成,可以直接用 kotlin 写,然后用 Option + T 快捷键自动实现 Parcelable 接口

原来的代码中使用了 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 接口


AS 下载插件 | 使用 Parcelable 接口
https://enderhoshi.github.io/2018/10/08/AS 下载插件和 Parcelable 接口/
作者
HoshIlIlI
发布于
2018年10月8日
许可协议