我试图用不同的方法执行单独的查询,下面的代码不是我的实际代码,只是错误的一个例子,我有
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
在两种方法中调用,但是我得到了错误
IllegalStateException:不能再使用此构建器,已调用build()
如果我将其设为全局,那么我会得到同样的错误, 这可能只是我愚蠢但我无法解决问题,现在已经盯着它看了太长时间。
这是我的代码:
ConfigurationBuilder cb = new ConfigurationBuilder();
double lat = 51.5171;
double lon = 0.1062;
double res = 37;
String resUnit = "mi";
public void setup(){
cb.setOAuthConsumerKey("XXXXXXXXXXXXXXXXXXXXXx");
cb.setOAuthConsumerSecret("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
cb.setOAuthAccessToken("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
cb.setOAuthAccessTokenSecret("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
queryLon();
queryBir();
}
void queryLon(){
try {
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
for (int j = 0; j < 5; j++) {
Query query = new Query();
query.setRpp(100);
QueryResult result = twitter.search(new Query().geoCode(new GeoLocation(lat,lon), res, resUnit));
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
Tweet t = (Tweet) tweets.get(i);
//User u= twitter.showUser("twitter");
String location = t.getLocation();
println("Location: " + location);
}
}
}
catch (TwitterException te) {
println("Couldn't connect: " + te);
};
}
void queryBir(){
try {
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
for (int j = 0; j < 5; j++) {
Query query = new Query();
query.setRpp(100);
QueryResult result = twitter.search(new Query().geoCode(new GeoLocation(lat,lon), res, resUnit));
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
Tweet t = (Tweet) tweets.get(i);
String location = t.getLocation();
println("Location: " + location);
}
}
}
catch (TwitterException te) {
println("Couldn't connect: " + te);
};
}
任何帮助都会受到赞赏,欢呼。
忘了使用Twitter4j和Processing
提及我答案 0 :(得分:3)
看起来非常清楚:错误告诉我们build()
只能被调用一次,而您显然是多次尝试调用它。所以,简单的解决方案:当你想创建一个新的TwitterFactory时,要么在你第一次调用它时在变量中捕获cb.build()
的结果,然后重用它,或者创建一个新的ConfigurationBuilder
实例并且在创建新的TwitterFactory
时调用它的build()时间,尽管这看起来很浪费。首先尝试捕获cb.build()
。