【问题标题】:How to upload multiple files in WebView on Android in Kotlin?如何在 Kotlin 的 Android 上的 WebView 中上传多个文件?
【发布时间】:2020-06-09 03:59:30
【问题描述】:

我尝试使用 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







        }

从 logcat 中我可以看到,当我在 OnActivityResult 的 For 循环中从 clipData 获取 uri 时,崩溃点是 results!![i] = item.uri。我对该代码行有评论。崩溃消息是“kotlin.KotlinNullPointerException”。

【问题讨论】:

    标签: android android-studio kotlin android-webview


    【解决方案1】:

    我找到了解决办法。

    只需要初始化结果:

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

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 2012-07-28
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多