带有From String.format

时间:2015-06-05 09:09:18

标签: java android string format

我的Android应用程序中有一个奇怪的String.format行为,我不会解读...

我试图在界面中制作一些静态定义。这也很好,但在某些情况下我得到一个例外:

E/AndroidRuntime(32450): java.lang.ExceptionInInitializerError
E/AndroidRuntime(32450):    at de.mydomain._defines_database$query.<clinit>(_defines_database.java:61)
E/AndroidRuntime(32450):    at de.mydomain.MyActivity.onCreate(MyActivity.java:116)
....
E/AndroidRuntime(32450): Caused by: java.lang.NullPointerException: format == null
E/AndroidRuntime(32450):    at java.lang.String.format(String.java:1995)
E/AndroidRuntime(32450):    at java.lang.String.format(String.java:1973)
E/AndroidRuntime(32450):    at de.mydomain._defines_database$table_coloumn.<clinit>(_defines_database.java:204)
E/AndroidRuntime(32450):    ... 16 more

我在_defines_database中的代码:

Line  17: public interface _defines_database
Line  18: {
Line  19:   public interface query
Line  20:   {
...
Line  61:     public final static String eOrder      = table_coloumn.eStatus+" DESC, ";
...
Line 160:     public final static String  person_sign= "SELECT sign_%2$s FROM %1$s WHERE id_%2$s = %3$s";
Line 161:     public final static String user_sign   = String.format(person_sign,"user", "usr","%s"); 
Line 162:
Line 163:   }
...
...
Line 178:   public interface table_coloumn
Line 179:   { 
...
Line 183:     public final static String eStatus = "(CASE"
Line 184:                                        + "  WHEN `end_time` IS NOT NULL THEN '"+ Status.STOPPED.ordinal() +"'\n"
Line 185:                                        + "  WHEN `start_time`  IS NOT NULL THEN '"+ Status.STARTED.ordinal() +"'\n"
Line 186:                                        + "  ELSE '"+ Status.PLANNED.ordinal() +"'\n "
Line 187:                                        + "END)";
...
Line 204:     public final static String userTour = "name_tour || ' (' || ("+ String.format(query.user_sign,"user_tour")+ ")  || ')'";
...
Line 304:   }
Line 305: }

所以我不明白:1。第61行抛出异常,但原因是第204行,原因是字符串格式为空。

但是所有变量都来自静态最终字符串,因此它们永远不应该被更改。 因此,第204行中的“format”参数只能为NULL,而第161行中的String.format将返回NULL值。

但据我所知,文档String.format应该永远不会返回NULL。

第二件事我不解读......我在第61行的定义与第204行没有关系,那么第204行如何成为这个例外的原因?

我找到了一个关于此Exceptiontype的相关主题,但它对我的问题没有帮助。 @see:ExceptionInInitializerError

UPDATE:当我将“user_sign”(第161行)更改为没有String.format()的静态字符串时,错误似乎不会出现。 也许String.format()不喜欢将“%s”作为参数之一插入?

1 个答案:

答案 0 :(得分:0)

这是因为您的table_coloumn.eStatus为空。我不知道为什么跟踪在不同的行上,但是如果你将table_coloumn.eStatus初始化为适当的值,它应该开始工作。

如果你直接用String设置user_sign,也不要问我为什么会这样。我也没有答案。可能是魔术......:P