Android - String.format - MissingFormatArgumentException和InvocationTargetException

时间:2015-05-11 11:22:01

标签: android string string.format 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$1.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

2 个答案:

答案 0 :(得分:1)

它应该是

 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引用的String。第二个版本做同样的事情,但直接使用getString(int resId, Object...objs)。在您的情况下,您缺少的是第一个逗号之前的括号:

getString(R.string.some_string,

应该是

getString(R.string.some_string),

答案 1 :(得分:0)

以下是字符串值的格式化方式

    String result = String.format("%s %s %s", getString(R.string.some_string),
                    strPropertyName, "some string");