我正在研究一个小文件管理器,以帮助我学习android的基础知识,但我一直遇到错误。每当我在文件夹中有很多项目时,它就崩溃了,我收到类似这个的消息,
java.lang.StringIndexOutOfBoundsException:length = 26; regionStart = 23; regionLength = -2
可能导致这种情况的原因是什么?它指向的行是第2行:
1.)String mimeType = "";
2.)mimeType = URLConnection.guessContentTypeFromName(f.getName());
答案 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
}
}