如何在 Kotlin 的 Android 网页视图中上传多个文件?



我尝试使用WebView上传一个文件,效果很好。但是,一旦我选择了多个文件并上传,程序就崩溃了。代码如下:

override fun onActivityResult(
requestCode: Int, resultCode: Int,
intent: Intent?
) {
super.onActivityResult(requestCode, resultCode, intent)
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage || requestCode != FILECHOOSER_RESULTCODE) return
var results: Array<Uri>? = null
if (resultCode === Activity.RESULT_OK) {
if (intent != null) {
val dataString = intent.dataString
val clipData = intent.clipData
if (clipData != null) {

for (i in 0 until clipData.itemCount) {
val item = clipData.getItemAt(i)
results!![i] = item.uri //Here is the crash point
}
}
if (dataString != null) results =
arrayOf(Uri.parse(dataString))
}
}

mUploadMessage!!.onReceiveValue(results)
mUploadMessage = null

return

}
}

这是WebChromeClient((中的代码:

override fun onShowFileChooser(
view: WebView,
filePathCallback: ValueCallback<Array<Uri>>,
fileChooserParams: FileChooserParams
): Boolean {
if (mUploadMessage!= null) {
mUploadMessage!!.onReceiveValue(null);
mUploadMessage = null;
}
mUploadMessage = filePathCallback
val intent = fileChooserParams.createIntent()
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
intent.setType("*/*")
startActivityForResult(intent, FILECHOOSER_RESULTCODE)
return true



}

从日志猫中我可以看到崩溃点是结果!![i] = item.uri当我从 onActivityResult 中的 For 循环中的 clipData 获取 uri 时。我对代码行有评论。崩溃消息是">kotlin。KotlinNullPointerException".

我找到了解决方案。

只需要初始化结果:

results= Array(clipData.itemCount, {clipData.getItemAt(0).uri})

最新更新