尝试在空 object 引用上调用虚拟方法 'java.lang.String at.huber.youtubeExtractor.YtFile.getUrl()'
Attempt to invoke virtual method 'java.lang.String at.huber.youtubeExtractor.YtFile.getUrl()' on a null object reference
在我的物理设备中的第一个安装应用程序中。我可以将一些视频下载到存储中,但是当我对更多视频执行相同操作时却不能。然后 Android Studio IDE 向我宣布 init String downloadURL 行中的错误,如此问题的标题。这是我的代码:
String youtubeLink = ("https://www.youtube.com/watch?v=" + videoYT.getId().getVideoId());
YouTubeUriExtractor ytEx = new YouTubeUriExtractor(context) {
@Override
public void onUrisAvailable(String videoId, String videoTitle, SparseArray<YtFile> ytFiles) {
if (ytFiles != null) {
int itag = 22;
String downloadURL = ytFiles.get(itag).getUrl();// line where Android Studio IDE gives an error
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL));
String title = URLUtil.guessFileName(downloadURL,null,null);
request.setTitle(title);
request.setDescription("Downloading file...");
String cookie = CookieManager.getInstance().getCookie(downloadURL);
request.addRequestHeader("cookie",cookie);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,title);
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
Toast.makeText(context, "Bắt đầu tải xuống...", Toast.LENGTH_SHORT).show();
}
}
};
ytEx.execute(youtubeLink);
问题出在这里ytFiles.get(itag)
。
在SparseArray的源代码中:get()
将returnnull
/**
* Gets the Object mapped from the specified key, or <code>null</code>
* if no such mapping has been made.
*/
public E get(int key) {
return get(key, null);
}
如果使用kotlin
实现,需要修改为:
val downloadURL = ytFiles.get(itag)?.getUrl() ?: ""
要使用 Java
实现此目的,您需要对 ytFiles.get(itag)
对象执行空操作。
在我的物理设备中的第一个安装应用程序中。我可以将一些视频下载到存储中,但是当我对更多视频执行相同操作时却不能。然后 Android Studio IDE 向我宣布 init String downloadURL 行中的错误,如此问题的标题。这是我的代码:
String youtubeLink = ("https://www.youtube.com/watch?v=" + videoYT.getId().getVideoId());
YouTubeUriExtractor ytEx = new YouTubeUriExtractor(context) {
@Override
public void onUrisAvailable(String videoId, String videoTitle, SparseArray<YtFile> ytFiles) {
if (ytFiles != null) {
int itag = 22;
String downloadURL = ytFiles.get(itag).getUrl();// line where Android Studio IDE gives an error
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL));
String title = URLUtil.guessFileName(downloadURL,null,null);
request.setTitle(title);
request.setDescription("Downloading file...");
String cookie = CookieManager.getInstance().getCookie(downloadURL);
request.addRequestHeader("cookie",cookie);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,title);
DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
downloadManager.enqueue(request);
Toast.makeText(context, "Bắt đầu tải xuống...", Toast.LENGTH_SHORT).show();
}
}
};
ytEx.execute(youtubeLink);
问题出在这里ytFiles.get(itag)
。
在SparseArray的源代码中:get()
将returnnull
/**
* Gets the Object mapped from the specified key, or <code>null</code>
* if no such mapping has been made.
*/
public E get(int key) {
return get(key, null);
}
如果使用kotlin
实现,需要修改为:
val downloadURL = ytFiles.get(itag)?.getUrl() ?: ""
要使用 Java
实现此目的,您需要对 ytFiles.get(itag)
对象执行空操作。