我在Google Play控制台中收到了此崩溃报告,我自己从未体验过。
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2505)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2577)
at android.app.ActivityThread.access$1000 (ActivityThread.java:164)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1462)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:160)
at android.app.ActivityThread.main (ActivityThread.java:5541)
at java.lang.reflect.Method.invoke (Method.java)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:759)
Caused by: java.lang.StringIndexOutOfBoundsException:
at java.lang.String.startEndAndLength (String.java:504)
at java.lang.String.substring (String.java:1333)
at .Word.onCreate (Word.java)
at android.app.Activity.performCreate (Activity.java:6093)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2458)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2577)
at android.app.ActivityThread.access$1000 (ActivityThread.java:164)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1462)
at android.os.Handler.dispatchMessage (Handler.java:102)
at android.os.Looper.loop (Looper.java:160)
at android.app.ActivityThread.main (ActivityThread.java:5541)
at java.lang.reflect.Method.invoke (Method.java)
at java.lang.reflect.Method.invoke (Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:964)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:759)
此崩溃报告未提及Word.java
类的哪一行导致问题。在我的课堂上,我使用以下substring
方法。
definition = defn.substring(0, defn.indexOf("@"));
sentence = rawMeaning.substring(rawMeaning.lastIndexOf('@') + 1);
我的defn
字符串示例为test1@test2
,test1@
。我的defn
字符串字符串中的每一个都包含@
。某些字符串包含@
之后的字符,有些字符串不包含@
之后的任何字符。我的rawMeaning
字符串与我的defn
字符串共享一个类似的格式。
有趣的是,我收到了另一个崩溃报告,该报告给出了类似的错误,但它提到错误导致了我的应用结算,StringIndexOutOfBoundsException caused by in app billing queryInventoryAsync
如何解决这个问题?
答案 0 :(得分:1)
您绝对100%确定所有字符串都包含“@”字符吗?正如你没有表明的那样,这仍然是最可能的原因。实际上,使用您显示的代码,仅可能的解释是您的代码正在处理字符串而不此字符。
我建议您发布一个新版本的应用,以便在出现此错误时提供诊断信息。试试这个:
更改
definition = defn.substring(0, defn.indexOf("@"));
要
try {
definition = defn.substring(0, defn.indexOf("@"));
} catch (Exception ex) {
String message = "Error processing string: (" + defn + ")";
throw new RuntimeException(message, ex);
}
然后,当应用程序下次崩溃时,崩溃日志将包含一个堆栈跟踪,其中会显示一条消息,告诉您哪个字符串导致了问题。
答案 1 :(得分:0)
如果你确定最多得到两个单词,请尝试选择“拆分”而不是找到“subString”。
您的代码:
definition = defn.substring(0, defn.indexOf("@"));
sentence = rawMeaning.substring(rawMeaning.lastIndexOf('@') + 1);
试用:
String[] words = defn.split("@);
definition =words[0];
sentence = words.length>1? words[1] : "";