我正在开发一个Android应用程序,使用ExoPlayer用于视频播放,Glide用于图像显示,以及用于文件下载的下载库,并且它们都具有与HttpURLConnection相关的NullPointerExctive,我确信使用的链接是可用的。
神奇的是,我只是按照这些库的官方留档中描述的方法正常加载数据,这种错误时有发生,三个库可能不会同时抛出NullPointerExctive,我甚至不知道如何重现这个问题。
这是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()
}
下面是我使用的所有依赖和插件:
...
plugins {
val androidVer = "7.1.2"
id("com.android.application") version androidVer apply false
id("com.android.library") version androidVer apply false
val kotlinVer = "1.6.20-M1"
id("org.jetbrains.kotlin.android") version kotlinVer apply false
id("org.jetbrains.kotlin.plugin.parcelize") version kotlinVer apply false
id("org.jetbrains.kotlin.kapt") version kotlinVer apply false
}
...
dependencies {
implementation("androidx.test.ext:junit-ktx:1.1.3")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
androidTestImplementation("androidx.test:runner:1.4.0")
androidTestImplementation("androidx.test:rules:1.4.0")
implementation("androidx.core:core-ktx:1.7.0")
implementation("androidx.appcompat:appcompat:1.4.1")
implementation("com.google.android.material:material:1.5.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.3")
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("androidx.navigation:navigation-fragment-ktx:2.4.1")
implementation("com.github.zhpanvip.BannerViewPager:bannerview:2.6.6")
implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.5")
implementation("com.yanzhenjie:sofia:1.0.5")
implementation("com.github.SGPublic:Blur-Fix-AndroidX:1.1.2")
implementation("com.github.SGPublic:MultiWaveHeaderX:1.0.0")
implementation("com.github.li-xiaojun:XPopup:2.7.5")
implementation("com.google.zxing:core:3.4.1")
implementation("com.google.code.gson:gson:2.9.0")
val glideVer = "4.13.1"
implementation("com.github.bumptech.glide:glide:$glideVer")
annotationProcessor("com.github.bumptech.glide:compiler:$glideVer")
kapt("com.github.bumptech.glide:compiler:$glideVer")
implementation("jp.wasabeef:glide-transformations:4.3.0")
val exoVer = "2.17.0"
implementation("com.google.android.exoplayer:exoplayer-core:$exoVer")
implementation("com.google.android.exoplayer:exoplayer-dash:$exoVer")
implementation("com.google.android.exoplayer:exoplayer-ui:$exoVer")
val roomVer = "2.4.2"
implementation("androidx.room:room-runtime:$roomVer")
implementation("androidx.room:room-ktx:$roomVer")
annotationProcessor("androidx.room:room-compiler:$roomVer")
kapt("androidx.room:room-compiler:$roomVer")
testImplementation("androidx.room:room-testing:$roomVer")
val ariaVer = "3.8.12"
implementation("com.arialyy.aria:core:$ariaVer")
annotationProcessor("com.arialyy.aria:compiler:$ariaVer")
kapt("com.arialyy.aria:compiler:$ariaVer")
}
...
我尝试过失效和重启,甚至完全卸载和重新安装了Android Studio,但问题仍然无法解决,那么问题是什么?
亲爱的使用这个库来播放youtube视频,它令人惊叹,易于使用和管理,这是在应用程序中播放youtube视频的最佳方式
implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:chromecast-sender:0.23'
清单(如果你想使用全屏视频播放)
<activity
android:name="com.pksofterltd.videoislamapp.Activities.LiveVideo"
android:exported="true"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode">
</activity>
XML
<com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView
android:id="@+id/youtube_player_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:showYouTubeButton="false" /
JAVA
YouTubePlayerView youTubePlayerView;
YouTubePlayer youTubePlr;
@Override
protected void onCreate(Bundle savedInstanceState) {
youTubePlayerView = findViewById(R.id.youtube_player_view);
// link of video https://www.youtube.com/watch?v=HoJtAI0B-Bw
// you just use video ID insted on complete URL .video id you find at the end of url
// here is video ID is "HoJtAI0B-Bw"
play("HoJtAI0B-Bw");
}
public void play(String url){
getLifecycle().addObserver(youTubePlayerView);
youTubePlayerView.addFullScreenListener(new YouTubePlayerFullScreenListener() {
@Override
public void onYouTubePlayerEnterFullScreen() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
}
@Override
public void onYouTubePlayerExitFullScreen() {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
});
youTubePlayerView.addYouTubePlayerListener(new AbstractYouTubePlayerListener() {
@Override
public void onReady(@NonNull YouTubePlayer youTubePlayer) {
youTubePlr =youTubePlayer;
youTubePlr.loadVideo(url,0);
}
});
}
如何使用实现以下功能? 这是完全不一样的,我实际上如何解决?
未处理 异常: java.io.FileNotFoundException 测试过文件存在,但放在Scanner里面报错。有佬能帮忙分析下吗
以下是我的项目结构的一部分: 我有init.sql脚本,它应该创建用户、数据库和表(用户和数据库与docker-compose.yml文件中的相同) 但当我查看docker entrypoint initdb.d文件夹时,它是空的(没有init.sql文件)。我使用以下命令: docker exec最新发布的\u postgres-passport\u 1 ls-l docker入口点initdb
我正在尝试将50000条记录插入到一个五节点的卡桑德拉集群中。我正在使用执行异步以提高性能(减少应用程序端的插入时间)。我尝试了具有多个批处理大小的批处理语句,但每次我都遇到以下异常。 我插入了数据,即10000,20000到40000条记录,没有任何问题。以下是我编写的java代码。 其中ps是准备好的语句,batches是批数,batchSize是批中的记录数。 我无法理解这个问题的根本原因。
我的 centos7 虚拟机中安装的 wiki.js + postgresql 运行初始化页面时出现下面提示,要如何解决