微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

下载管理器抛出 android.os.NetworkOnMainThreadException

如何解决下载管理器抛出 android.os.NetworkOnMainThreadException

DownloadManager 仅在三星设备 (Android 10) 上抛出 android.os.networkonmainthreadException

            val request = DownloadManager.Request(Uri.parse(url))
            val fileName = parseFileName(url)
            request.addRequestHeader("Cookie",CookieManager.getInstance().getCookie(url))
            request.allowScanningByMediaScanner()
            request.setNotificationVisibility(
                DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED
            ) 
            request.setDestinationInExternalPublicDir(
                Environment.DIRECTORY_DOWNLOADS,fileName
            )
            val dm = activity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager?
            dm?.enqueue(request)

堆栈跟踪:

Fatal Exception: android.os.networkonmainthreadException
       at android.os.Parcel.createException(Parcel.java:2098)
       at android.os.Parcel.readException(Parcel.java:2056)
       at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
       at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
       at android.content.ContentProviderProxy.insert(ContentProviderProxy.java:481)
       at android.content.ContentResolver.insert(ContentResolver.java:1835)
       at android.app.DownloadManager.enqueue(DownloadManager.java:1544)

dm?.enqueue(request) 抛出 android.os.networkonmainthreadException。虽然可以在主线程中调用

我该如何解决这个问题?

解决方法

我在三星设备(s9 和 a71)上遇到了同样的问题。我用 .setDestinationInExternalFilesDir(context,Environment.DIRECTORY_DOWNLOADS,fileName) 代替 .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,fileName) 它也适用于三星设备。

,

@RageTF 不知道你为什么感谢我,但是当应用程序尝试在其主线程上执行网络操作时会抛出 NetworkOnMainThreadException。这仅适用于面向 Honeycomb SDK 11 或更高版本的应用程序。允许面向早期 SDK 版本的应用程序在其主事件循环线程上进行网络连接,但强烈建议不要这样做。因此,如果您尝试在 UI 线程上执行任何这些操作,您必须将它们包装在一个工作线程中。大多数情况下,错误源于直接在 UI 线程上放置昂贵的操作。为确保您不会破坏用户体验,在单独的 Thread 类上执行套接字连接、HTTP 请求、文件下载和其他长期操作非常重要。

,

刚刚收到这个错误,结果是:我没有包含文件扩展名!!

例如:xxx.png

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。