0

我正在使用 Twitter4j 获取给定用户的关注者。在某些时候,我总是达到速率限制。我很高兴程序能睡 15 分钟来结束这个。但是,当它醒来时,我得到一个错误。

请参阅以下代码:

protected IDs fetchAndStoreFollowers(TwitterUser user) {
    Twitter twitter = this.getTwitterApi();
    long cursor = -1;
    IDs ids = null;
    do {
        try {
            ids = twitter.getFollowersIDs(user.getId(), cursor);
            System.out.println("Got a followers batch");
            cursor = ids.getNextCursor();
            this.storeFollowers(user, ids);
            System.out.println("Saved!");
        } catch (TwitterException e) {
            System.out.println("Oh no! Rate limit exceeded... going to sleep.");
            handleTwitterException(e);
            System.out.println("Waking up!");
        }
    } while (ids.hasNext());
    return ids;
}

从睡眠中醒来后,程序会NullPointerException在这一行抛出一个:

} while (ids.hasNext());

任何人都可以发现为什么吗?

4

1 回答 1

2

遇到错误的原因是可重现且非常合乎逻辑的。

首先,你初始化你的idsto null

如果发生RateLimitException(TwitterException),则不会为以下行中的变量设置任何实际值ids

ids = twitter.getFollowersIDs(user.getId(), cursor);

然后执行 -Block 中的代码catch- whileids仍指向null. 处理完之后(并且您会在控制台上看到输出......),该行:

while (ids.hasNext());

产生NullPointerException.

解决方案

更改 while 条件如下:

while (ids == null || (id!=null && ids.hasNext()));

请注意,在cursor发生错误情况时,可能没有或必须相应地更改 in 的值。

希望这可以帮助。

于 2017-06-06T14:50:38.943 回答