<string name="info_message">name: %1$s, age: %2$d</string>
String str = getString(R.string.info_message, "zs");
- 在 Android 开发中,上述代码,出现如下警告信息
Wrong argument type for formatting argument '#2' in info_message: conversion is 'd', received String (argument #3 in method call)
java.util.IllegalFormatConversionException: d != java.lang.String
问题原因
- 在
values/strings.xml
文件中定义的字符串资源,包含如下占位符
-
%1$s
表示字符串类型的占位符,对应方法中的第一个参数,即字符串
-
%2$d
表示整数类型的占位符,对应方法中的第二个参数,即整数
- 在调用 getString 方法时,传入的参数类型必须与占位符的类型一致,否则会出现上述警告或错误
处理策略
- 确保传入的参数类型与占位符的类型一致
String str = getString(R.string.info_message, "zs", 20);Log.i(TAG, str);
# 输出结果name: zs, age: 20
- 或者,不传入参数,直接使用字符串资源
String str = getString(R.string.info_message);Log.i(TAG, str);
# 输出结果name: %1$s, age: %2$d