You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从ViewModel调用双参数字符串时抛出MissingFormatArgumentException问题求助

问题原因与修复方案

你出错的核心原因是参数传递方式不匹配:Android系统的getString(int resId, Object... formatArgs)方法要求传入的是可变参数(多个独立参数),但你把整个ArrayList<Any>作为单个参数传给了它,相当于只提供了一个参数,完全无法匹配字符串里的%1$s和%2$s两个占位符,因此抛出格式参数缺失的异常。

修复方法有两种:

方法一:改用可变参数直接传递(推荐)

修改你的工具函数,让它直接支持可变参数,调用时无需包装成列表:

private fun getString(textId: Int, vararg args: Any) =
    getApplication<Application>().applicationContext?.getString(textId, *args) ?: ""

调用时直接传入两个参数:

val message = getString(R.string.send_message, amount, name)

注意:你调用时写的R.string.mystring要改成R.string.send_message,和字符串资源的name对应,避免资源找不到的问题

方法二:保留列表参数,用展开运算符拆分

如果必须通过列表传递参数,需要用*展开运算符把列表转换成可变参数格式:

private fun getString(textId: Int, args: ArrayList<Any>) =
    getApplication<Application>().applicationContext?.getString(textId, *args.toTypedArray()) ?: ""

调用代码保持不变:

val message = getString(R.string.send_message, arrayListOf(amount,name))

内容的提问来源于stack exchange,提问作者Carlos Hernández

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:48:15