【问题标题】:Why would this cause a StringIndexOutOfBoundsException? Android为什么这会导致 StringIndexOutOfBoundsException?安卓
【发布时间】:2014-02-22 23:47:34
【问题描述】:

我正在开发一个小型文件管理器来帮助我学习 android 的基础知识,但我一直遇到错误。每当我在文件夹中有很多项目时,它就会崩溃,并且我收到与此类似的消息,

java.lang.StringIndexOutOfBoundsException: 长度=26;区域开始=23;区域长度=-2

这可能是什么原因造成的?它指向的行是第 2 行:

1.)String mimeType = "";
2.)mimeType = URLConnection.guessContentTypeFromName(f.getName());

【问题讨论】:

  • 其中一个函数出了点问题。
  • 它不会“导致字符串越界异常”。它会引起StringIndexOutOfBoundsException. 对实际异常类型的更密切关注,其文本基本上会给你答案。

标签: java android file exception


【解决方案1】:

您缺少一些我们需要查看的关键行,例如定义 f(文件?URI?)的位置。但是,当我看到这个问题之前,它是由没有设置协议的 URI 引起的。

确保您有一个扩展程序并使用MimeTypeMap#getMimeTypeFromExtension() 可能也是一个不错的选择

【讨论】:

    【解决方案2】:

    当 URL 有一个片段时,我会发生此错误,该片段可以通过 # 后跟一些值来识别。 (有关 URL 片段的更多信息,请参阅https://www.w3.org/Addressing/URL/4_2_Fragments.html

    URL 片段对猜测内容类型没有帮助,并且由于在这种情况下存在问题,因此应在调用 URLConnection.guessContentTypeFromName() 之前将其删除。

    这是一个简单的函数,它返回一个 没有片段的 URL:

    private fun getSafeUrlForGuessing(url: String): String {
        return try {
            val uri = Uri.parse(url)
            if (uri.scheme?.startsWith("http") == true) {
                uri.buildUpon()
                        .fragment(null) // URLs with fragments cause URLConnection.guessContentTypeFromName() to throw
                        .build()
                        .toString()
            } else {
                url
            }
        } catch (error: Throwable) {
            url
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 2013-02-25
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2019-12-27
      • 2017-04-26
      相关资源
      最近更新 更多