java - 如何解决 HttpURLConnection 上的 NullPointerException?

标签 java android kotlin

我正在开发一个Android应用程序,使用ExoPlayer来播放视频,使用Glide来显示图片,使用下载库来下载文件,它们都有与HttpURLConnection相关的NullPointerException,我确定使用的链接是可用的。

神奇的是,我只是按照这几个库的 官方文档描述的方法正常加载数据,时不时出现这个错误,而且三个库可能不会同时抛出NullPointerException,我不甚至不知道如何重现这个问题。

这是 ExoPlayer 抛出的错误,导致视频无法加载:

E/LoadTask: Unexpected exception loading stream
      java.lang.NullPointerException: wrapped.getHeaderField(key) must not be null
        at com.android.tools.appinspection.network.httpurl.TrackedHttpURLConnection.getHeaderField(TrackedHttpURLConnection.kt:317)
        at com.android.tools.appinspection.network.httpurl.HttpsURLConnectionWrapper.getHeaderField(HttpsURLConnectionWrapper.kt:182)
        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.isCompressed(DefaultHttpDataSource.java:829)
        at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:413)
        at com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)
        at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1009)
        at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:412)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)

视频播放部分代码如下:

            val factory = ProgressiveMediaSource.Factory(
                DefaultHttpDataSource.Factory()
            )
            val mediaSource = arrayListOf<MediaSource>(
                factory.createMediaSource(MediaItem.fromUri(video.base_url)),
                factory.createMediaSource(MediaItem.fromUri(audio.base_url))
            )
            val media = MergingMediaSource(true, *mediaSource.toTypedArray())
            ViewModel.getPlayer()?.let { player ->
                player.setMediaSource(media)
                player.prepare()
            }

这是Aria抛出的导致软件崩溃的错误:

E/AndroidRuntime: FATAL EXCEPTION: pool-5-thread-2
    Process: io.github.sgpublic.bilidownload, PID: 22400
    java.lang.NullPointerException: wrapped.getRequestProperty(field) must not be null
        at com.android.tools.appinspection.network.httpurl.TrackedHttpURLConnection.getRequestProperty(TrackedHttpURLConnection.kt:235)
        at com.android.tools.appinspection.network.httpurl.HttpsURLConnectionWrapper.getRequestProperty(HttpsURLConnectionWrapper.kt:274)
        at com.arialyy.aria.http.ConnectionHelp.setConnectParam(ConnectionHelp.java:146)
        at com.arialyy.aria.http.download.HttpDFileInfoTask.run(HttpDFileInfoTask.java:82)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)

我试过Invalidate和Restart,甚至把Android Studio完全卸载重装,还是不能解决问题,请问是什么问题?

最佳答案

我找到了相关条目,总结起来就是a bug in the TrackedHttpURLConnection implementation ,修复将在 3 月中下旬左右结束。

更新:(2022 年 3 月 4 日 07:09AM)

Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:

Android Studio Dolphin Canary 5 (2021.3.1.5)
Android Gradle Plugin 7.3.0-alpha05
We encourage you to try the latest update.

If you notice further issues or have questions, please file a new bug report.

Thank you for taking the time to submit feedback — we really appreciate it!

关于java - 如何解决 HttpURLConnection 上的 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71284785/

相关文章:

Java 正则表达式捕获组

Android 应用程序测试 - 如何使用真实数据库测试 DAO 层?

kotlin - 如何在顶级函数中使用 koin 注入(inject)依赖项

java - 返回扩展类的类型给平台声明冲突

kotlin - Kotlin-从KProperty1 <T,P>获取Class <T>

java - 为什么将这两个 double 相加不能给出正确答案?

java - 如何用不同的方法格式化数组?

android - CursorAdapter 不在 ListView 中显示任何数据

android - 为什么 mkdirs() 方法不起作用?

java - 如何使用终端创建 .jar 文件