我正在使用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());
有人可以找到原因吗?
答案 0 :(得分:2)
遇到错误的原因是可重现的并且非常符合逻辑。
首先,您将ids
初始化为null
。
如果发生RateLimitException
(TwitterException),则不会在以下行中的变量ids
中设置实际值:
ids = twitter.getFollowersIDs(user.getId(), cursor);
然后执行catch
- 阻止代码 - 而ids
仍指向null
。处理完毕后(并在控制台上看到输出...),行:
while (ids.hasNext());
生成NullPointerException
。
按如下方式更改时间条件:
while (ids == null || (id!=null && ids.hasNext()));
请注意,如果出现错误,cursor
中的值可能没有或必须相应更改。
希望这有帮助。