java - YouTube API v3 中的 NullPointerException

标签 java youtube nullpointerexception youtube-data-api

我一直在使用 Java 来使用 YouTube API v3,但遇到了问题。

当尝试在数组中设置变量时,我收到 NullPointerException。这看起来完全是随机且不可能的。我在这条线上得到了这个:

full[0] = snippet.getDisplayMessage().toLowerCase();

在此方法中:

private static void listChatMessages(
        final String liveChatId,
        final String nextPageToken,
        long delayMs) {
        System.out.println(
            String.format("Getting chat messages in %1$.3f seconds...", delayMs * 0.001));
        Timer pollTimer = new Timer();
        pollTimer.schedule(
            new TimerTask() {
                @Override
                public void run() {
                    try {
                        // Get chat messages from YouTube
                        LiveChatMessageListResponse response = youtube
                            .liveChatMessages()
                            .list(liveChatId, "snippet, authorDetails")
                            .setPageToken(nextPageToken)
                            .setFields(LIVE_CHAT_FIELDS)
                            .execute();

                        // Display messages and super chat details
                        List<LiveChatMessage> messages = response.getItems();
                        for (int i = 0; i < messages.size(); i++) {
                            LiveChatMessage message = messages.get(i);
                            LiveChatMessageSnippet snippet = message.getSnippet();
                            final String[] full = new String[2];
                            full[0] = snippet.getDisplayMessage().toLowerCase();
                            full[1] = message.getId();
                            ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
                            es.submit(new Runnable() {
                                public void run() {
                                    PressKey.main(full);
                                }
                            });
                        }

                        // Request the next page of messages
                        listChatMessages(
                            liveChatId,
                            response.getNextPageToken(),
                            response.getPollingIntervalMillis());
                    } catch (Throwable t) {
                        System.err.println("Throwable: " + t.getMessage());
                        t.printStackTrace();
                    }
                }
            }, delayMs);
    }
}

最佳答案

我不完全确定 API 是如何实现的,但发生这种 NPE 是因为

snippet.getDisplayMessage()

null,并且在 null 上调用 .toLowerCase() 会导致 NPE。

就像我说的,我不确定 API 和容器类是如何实现的,但看起来 getDisplayMessage() 并不总是保证返回任何内容。

您可以通过检查空值并提供默认值来修复 NPE:

full[0] = snippet.getDisplayMessage() == null ? "" : snippet.getDisplayMessage().toLowerCase();

这里,如果 getDisplayMessage()null,我们将空字符串分配给 full[0]

关于java - YouTube API v3 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47734202/

相关文章:

javascript - 如何查看用于显示隐藏的json数据的html代码?

php - 获取 YouTube 视频缩略图并将其与 PHP 一起使用

java - 更改 Fragment 内的 TextView 给我 NullPointerException

java - 如何在Android开发中通过接受用户的文件名将文件保存在SD卡中

java - JFrame代码编译并运行,但不打开窗口

javascript - Slider Revolution 响应式 jQuery Slider - 嵌入 YouTube 打破幻灯片自动前进

android如何为 fragment 按钮设置OnClickListener

java - 什么是NullPointerException,我该如何解决?

c# - 使用 switch 和枚举代替命名方法

java - 找不到符号 assertEquals