android - 在签名发布 apk 上忽略 fun toString()
问题描述
我正在使用 android:entries 为微调器使用数据绑定,仅在调试时工作但在发布 apk 时失败,覆盖 fun toString() 被忽略
我在绑定之前使用 for(i in response.body) 并且它有效,我只是想知道是否有更好的解决方案以及导致此问题的问题是什么
<!--layout-->
<data>
<import type="com.myproject.model.Group"/>
<import type="java.util.List"/>
<variable
name="groups"
type="List<Group>"/>
</data>
<Spinner
android:id="@+id/spinnerGroup"
android:entries="@{groups}"/>
代码
//retrofit callback
override fun onResponse(call: Call<List<Group>>, response: Response<List<Group>>) {
for(i in response.body){} //temporary solution
binding.groups=response.body
}
//model
class Group {
@SerializedName("group")
@Expose
val group: String? = null
override fun toString(): String {
return group?:""
}
}
微调器上的预期条目
Group A
Group B
Group C
实际结果
{group=Group A}
{group=Group B}
{group=Group C}
解决方案
在我看来,这与Proguard配置有关
我建议在Group类的开头使用data关键字,并在类定义的上方添加@Keep注释
@Keep
data class Group
避免此问题的另一种方法是在 Proguard 文件中添加新规则
-keep class com.myproject.model.Group.** { *; }
推荐阅读
- r - R中两种密度混合的卷积
- sql - ballerina.io SQL LIKE 语句
- apache-kafka - .properties 文件中的变量?
- bash - 计算在线会议的总时间
- r - 使用日期序列,将一个数字除以一个季度的天数
- reactjs - ReactJS Formik,为什么表格没有清除?
- sql - 我可以修改 BigQuery 中多个嵌套 RECORD 中的列,然后保持该列与以前相同的名称和位置吗?
- python - 为什么安装 TensorFlow 需要 google-auth?
- git - 有没有办法查看被 git 隐藏的文件的历史记录?
- laravel - 与分页的关系