我正在开发一个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,但问题仍然无法解决,那么到底是什么问题呢?