我正在开发一个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/