升级AGP 3.1.0后Gradle Plugin Lint格式化字符串资源报错
解决AGP 3.1.0升级后Lint的StringFormatMatches错误
这个问题是因为AGP 3.1.0对字符串格式化的类型检查规则变得更严格了。你的字符串资源amount_format使用了%1$.2f格式符,它预期接收的是Double类型参数,但你传入的TagAndTotal.total是Float类型,Lint现在会把这种类型不匹配(虽然运行时能正常工作)判定为错误。
下面是几种可行的解决办法:
修改数据类的类型为Double
直接把TagAndTotal里的total字段类型从Float改成Double,这样和格式化符的预期类型完全匹配,从根源解决问题:data class TagAndTotal( @ColumnInfo(name = "tag_name") var tagName: String, @ColumnInfo(name = "total") var total: Double )显式转换Float为Double再传入
如果不想改动数据类的字段类型,可以在调用格式化方法的时候,把Float值转成Double:val formattedAmount = applicationContext.getString(R.string.amount_format, tagAndTotal.total.toDouble())忽略该Lint检查
如果你确认这种类型不匹配不会影响运行,也可以针对性地忽略这个Lint错误:- 单个代码处忽略:用
@Suppress注解标记@Suppress("StringFormatMatches") val formattedAmount = applicationContext.getString(R.string.amount_format, tagAndTotal.total) - 全局忽略:在项目的
lint.xml文件中添加规则<?xml version="1.0" encoding="UTF-8"?> <lint> <issue id="StringFormatMatches" severity="ignore" /> </lint>
- 单个代码处忽略:用
内容的提问来源于stack exchange,提问作者littlegnal
相关产品推荐
相关产品推荐

