Java 例外情况InInitializeError与From String.format
在我的android应用程序中,我对String.format有一种奇怪的行为,我无法理解的是Java 例外情况InInitializeError与From String.format,java,android,string,format,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.
我试图在接口中进行一些静态定义。这也很好,但在某些情况下,我会遇到一个例外:
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
所以我不明白的是:1。第61行引发异常,但原因是第204行,原因是字符串格式为空
但所有变量都来自静态的final字符串,所以它们永远不应该被更改。
因此,第204行中的“format”参数只能为NULL,因为第161行中的String.format将返回NULL值
但据我所知,文档String.format永远不会返回NULL
第二件事我不想站起来。。。我在第61行中的定义与第204行无关,那么第204行怎么可能是这个异常的原因呢
我找到了一个与此Exceptiontype相关的主题,但它对我的问题没有帮助。
@见:
更新:当我将“用户签名”(第161行)更改为不带String.format()的静态字符串时,错误似乎不会发生。
可能String.format()不喜欢将“%s”作为参数之一插入???这是因为您的
表\u coloumn.eStatus
为空。我不知道为什么跟踪在不同的行上,但是如果您将table\u coloumn.eStatus
初始化为适当的值,它应该开始工作
不要问我,如果你直接用字符串设置
user\u sign
,它为什么会起作用。我也没有答案。可能是魔法…:P这也很有效,但在一些情况下
我得到了一个例外。在哪种情况下?我无法重建这种情况,但我发现异常是在我的应用程序在后台运行一段时间后返回应用程序时触发的。我知道android在内存不足时会清除所有变量,但静态最终界面应该自动恢复。抛出此错误是因为此初始化步骤出错。您确定除此之外没有其他异常吗?是的,只有这一个异常,另一个异常是因为我有异常的文本记录,并且我还观看了LogCat。(请参阅我帖子中的Loginfos)eStatus不是空的,我忘记发布第183-187行(现在您可以看到这些行)
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: }