【发布时间】:2015-08-20 04:08:54
【问题描述】:
我在我的 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-Value。
但据我了解,文档 String.format 永远不应返回 NULL。
我不明白的第二件事......我在第 61 行的定义与第 204 行无关,那么第 204 行怎么会是这个异常的原因呢?
我找到了有关此 Exceptiontype 的相关主题,但它对我的问题没有帮助。 @见:ExceptionInInitializerError
更新:当我将“user_sign”(第 161 行)更改为没有 String.format() 的静态字符串时,似乎不会发生错误。 也许 String.format() 不喜欢将“%s”作为参数之一插入??
【问题讨论】:
-
这也很好,但在某些
cases中我得到了一个例外。在哪些情况下? -
我无法重建这种情况,但我在后台一段时间后返回我的应用程序后触发了异常。我知道当内存不足时android会清除所有变量,但静态最终接口konstands应该会自动恢复。引发错误是因为此初始化步骤出现问题。
-
你确定没有其他例外吗?
-
是的,我是,它只有一个例外,还有一个例外,因为我有一个例外的文本记录,我还观看了 LogCat。 (请参阅我帖子中的登录信息)
标签: java android string format