11

尝试使用twitter4j lib 将我的 webapp 与 Twitter 集成。
我已经在 twitter 网站上注册了我的应用程序并获得了Consumer key价值Consumer secret
没什么特别的,标准OAuth步骤。

代码:

public class TwitterService {
    private final String CONSUMER_KEY = "xxx";
    private final String CONSUMER_SECRET = "yyy";

    public String fav() {
        Twitter twitter = TwitterFactory.getSingleton();
        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
...

例外:

Caused by: java.lang.IllegalStateException: consumer key/secret pair already set.

我没有更多的配置keysecret,任何.properties或其他文件。

编辑:

注释行twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);导致异常:

java.lang.IllegalStateException: OAuth consumer key/secret combination not supplied
4

2 回答 2

30

查看代码和文档,似乎Twitter不建议您使用实例化实例的方法。如果您想以编程方式提供配置(而不是使用属性),看起来您需要ConfigurationTwitterFactory.

...
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY);
builder.setOAuthConsumerSecret(CONSUMER_SECRET);
配置配置 = builder.build();
TwitterFactory 工厂 = 新 TwitterFactory(配置);
Twitter twitter = factory.getInstance();
...

未提供配置的工厂提供的单例默认使用配置Authorization支持的实现PropertyConfiguration。如果没有属性文件,它看起来不应该实例化OAuthAuthorization身份验证,这会导致您看到的异常。但是PropertyConfiguration会在整个文件中搜索CLASSPATH适当的属性文件,所以也许你忽略了一个。您可以在获取Twitter实例后立即尝试记录密钥和秘密以查看它们设置:

System.out.println("key:" + twitter.getConfiguration().getOAuthConsumerKey());
System.out.println("秘密:" + twitter.getConfiguration().getOAuthConsumerSecret());
于 2012-07-24T23:09:10.717 回答
0

我的预感是您正在设置私有最终变量,然后 twitter.setOAuthConsumer() 正在尝试做同样的事情。您应该只需要其中一个。您是否尝试过注释掉 twitter.setOAuthConsumer() 行?

文档解释了设置这些的“首选”方式。

于 2012-07-20T21:46:09.527 回答