Android - String.format - MissingFormatArgumentException 和 InvocationTargetException
Android - String.format - MissingFormatArgumentException and InvocationTargetException
我有以下代码块 -
strBody = String.format(getString(R.string.some_string,
strPropertyName,
"some string"
)
);
而 R.string.some_string 是这种形式 -
some words \'%1$s\' more words. %2$s
但我在某些设备上遇到以下异常 -
Caused by: java.lang.reflect.InvocationTargetException
1 java.lang.reflect.Method.invokeNative
2 java.lang.reflect.Method.invoke Method.java, line 515
3 android.view.View.onClick View.java, line 3949
... 11 more
Caused by: java.util.MissingFormatArgumentException: Format specifier: d
1 java.util.Formatter.getArgument Formatter.java, line 1111
2 java.util.Formatter.doFormat Formatter.java, line 1076
3 java.util.Formatter.format Formatter.java, line 1042
4 java.util.Formatter.format Formatter.java, line 1011
5 java.lang.String.format
应该是
strBody = String.format(getString(R.string.some_string),
strPropertyName, item.getString(ObjKombiItem.FIELD_PERMALINK));
或
strBody = getString(R.string.some_string,
strPropertyName, item.getString(ObjKombiItem.FIELD_PERMALINK));
第一个版本使用 String.format
将参数应用于 R.string.some_string
引用的字符串。第二个版本做同样的事情,但是直接使用getString(int resId, Object...objs)。在您的情况下,您缺少的是第一个逗号前的括号:
getString(R.string.some_string,
应该是
getString(R.string.some_string),
以下是您的字符串值的格式化方式
String result = String.format("%s %s %s", getString(R.string.some_string),
strPropertyName, "some string");
我有以下代码块 -
strBody = String.format(getString(R.string.some_string,
strPropertyName,
"some string"
)
);
而 R.string.some_string 是这种形式 -
some words \'%1$s\' more words. %2$s
但我在某些设备上遇到以下异常 -
Caused by: java.lang.reflect.InvocationTargetException
1 java.lang.reflect.Method.invokeNative
2 java.lang.reflect.Method.invoke Method.java, line 515
3 android.view.View.onClick View.java, line 3949
... 11 more
Caused by: java.util.MissingFormatArgumentException: Format specifier: d
1 java.util.Formatter.getArgument Formatter.java, line 1111
2 java.util.Formatter.doFormat Formatter.java, line 1076
3 java.util.Formatter.format Formatter.java, line 1042
4 java.util.Formatter.format Formatter.java, line 1011
5 java.lang.String.format
应该是
strBody = String.format(getString(R.string.some_string),
strPropertyName, item.getString(ObjKombiItem.FIELD_PERMALINK));
或
strBody = getString(R.string.some_string,
strPropertyName, item.getString(ObjKombiItem.FIELD_PERMALINK));
第一个版本使用 String.format
将参数应用于 R.string.some_string
引用的字符串。第二个版本做同样的事情,但是直接使用getString(int resId, Object...objs)。在您的情况下,您缺少的是第一个逗号前的括号:
getString(R.string.some_string,
应该是
getString(R.string.some_string),
以下是您的字符串值的格式化方式
String result = String.format("%s %s %s", getString(R.string.some_string),
strPropertyName, "some string");