尝试在空 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) 对象执行空操作。