私はクレイジーな文字列操作を行っているわけではありません。これは私にとって非常に奇妙なエラーです。
これは私が見たスタック トレースです...一度だけ...今まで:
java.lang.IndexOutOfBoundsException
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:158)
at java.lang.StringBuilder.append(StringBuilder.java:312)
at java.lang.StringBuilder.append(StringBuilder.java:44)
at java.util.Formatter.outputCharSequence(Formatter.java:1115)
at java.util.Formatter.doFormat(Formatter.java:1105)
at java.util.Formatter.format(Formatter.java:1063)
at java.util.Formatter.format(Formatter.java:1032)
at java.lang.String.format(String.java:2104)
at java.lang.String.format(String.java:2078)
at com.my.app.package.myWebViewClient.onPageFinished(Unknown Source)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:270)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:126)
at android.app.ActivityThread.main(ActivityThread.java:3998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:491)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
at dalvik.system.NativeStart.main(Native Method)
myWebViewClient の onPageFinished で、myWebView に次のスクリプトをロードするように指示します。
String A_VERY_LONG_SCRIPT = "a very long script" +
"that I format" + \\ some comment!
"in the source code!!" +
"some other things" +
"to make this script look really long";
String jsString = String.format("javascript:try{%s}catch(e){}", A_VERY_LONG_SCRIPT);
myWebView.loadUrl(jsString);
String.format 呼び出しには長さ制限などがありますか? それが理由なら、なぜこの 100% の確率、あるいは 80% の確率で再現できないのでしょうか?
この例外を再現できません。すべてのテストでこのスクリプトを何度もロードしているにもかかわらず、一度しか見たことがありません。例外を見て以来、コードを変更していません。さまざまな OS バージョンに対してテストしました。再び例外をトリガーすることはできないようですが、そもそもなぜそれを見たのか疑問に思っています。
では、この IndexOutOfBoundsException の原因は何ですか?
私はAndroid 3.0+向けに開発しています。