为什么会导致StringIndexOutOfBoundsException? Android的

时间:2014-02-22 23:47:35

标签: java android file exception

我正在研究一个小文件管理器,以帮助我学习android的基础知识,但我一直遇到错误。每当我在文件夹中有很多项目时,它就崩溃了,我收到类似这个的消息,

  

java.lang.StringIndexOutOfBoundsException:length = 26; regionStart = 23; regionLength = -2

可能导致这种情况的原因是什么?它指向的行是第2行:

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

当 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
    }
}