【问题标题】:Android - How do I find what is causing StringIndexOutOfBoundsExceptionAndroid - 如何找到导致 StringIndexOutOfBoundsException 的原因
【发布时间】:2011-07-21 06:59:45
【问题描述】:

我有一个应用程序可以打开 web 视图,并在不同的线程 (asynctask) 中定期通过 http 向服务器提交 GPS 数据。

我看到以下异常,但很难确定来源。你能帮我吗?这里是 Android 的相对新手。

V/  Exception Handler(  206): java.lang.StringIndexOutOfBoundsException
V/  Exception Handler(  206): 
V/  Exception Handler(  206): --------- Stack trace ---------
V/  Exception Handler(  206): 
V/  Exception Handler(  206):     java.lang.String.<init>(String.java:190)
V/  Exception Handler(  206):     android.webkit.FrameLoader.populateStaticHeaders(FrameLoader.java:372)
V/  Exception Handler(  206):     android.webkit.FrameLoader.handleHTTPLoad(FrameLoader.java:222)
V/  Exception Handler(  206):     android.webkit.WebViewWorker.handleMessage(WebViewWorker.java:129)
V/  Exception Handler(  206):     android.os.Handler.dispatchMessage(Handler.java:99)
V/  Exception Handler(  206):     android.os.Looper.loop(Looper.java:130)
V/  Exception Handler(  206):     android.os.HandlerThread.run(HandlerThread.java:60)

跟踪没有表明我的代码中是否有任何东西导致了这种情况。我只看到 android 系统代码。(或者我可能没有找到正确的方法)。

【问题讨论】:

  • 考虑使用调试器。有时很有帮助。

标签: android multithreading exception


【解决方案1】:

在 String 构造函数中出现 StringIndexOutOfBoundsException 非常罕见,我以前从未遇到过。您将什么样的数据传递给 AsyncTask(它随后传递给 WebKit)?是字符串缓冲区还是数组?

通常当我无法推断出错误的原因时,我会尝试:

  • 单步执行代码以找出导致崩溃的行
  • 打印调试语句

编辑

当我尝试在我的模拟器上强制使用StringOutOfBoundsException 时,它是FATAL EXCEPTION,日志级别是Error,日志标签是AndroidRuntime。在您的情况下,ExceptionHandler 似乎已捕获异常并已使用 Verbose 日志级别打印堆栈跟踪。这个异常处理程序是你自己的吗?还是属于android框架?

【讨论】:

  • 吉姆:你是对的。我正在使用我的默认未捕获异常处理程序,使用 Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler(this));
  • 在这种情况下,您能否在 StringIndexOutOfBoundsException 中打印消息?通常,此异常会告诉您它在超出范围时尝试访问的索引。可能很有启发性。
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 2018-08-04
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多