Twitter集成:消费者密钥/密钥对已设置

11

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

code:

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
2个回答

30

从代码和文档来看,您实例化Twitter实例的方法不被推荐。如果您想以编程方式提供配置(而不使用属性),则需要向TwitterFactory提供一个Configuration

...
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY); // 设置OAuth消费者密钥
builder.setOAuthConsumerSecret(CONSUMER_SECRET); // 设置OAuth消费者密钥
Configuration configuration = builder.build();
TwitterFactory factory = new TwitterFactory(configuration);
Twitter twitter = factory.getInstance();
...

如果尚未向工厂提供配置,则由工厂提供的单例默认使用由PropertyConfiguration配置支持的Authorization实现。如果没有属性文件,则看起来不应该实例化OAuthAuthorization,这就是导致您看到的异常的原因。但是PropertyConfiguration确实在整个CLASSPATH中搜索适当的属性文件,因此您可能忽略了其中一个。您可以尝试在获取Twitter实例后记录密钥和密钥值以查看它们的内容:

System.out.println("key:" + twitter.getConfiguration().getOAuthConsumerKey()); // 打印OAuth消费者密钥
System.out.println("secret: " + twitter.getConfiguration().getOAuthConsumerSecret()); // 打印OAuth消费者密钥

0

我的直觉是你正在设置私有的最终变量,然后twitter.setOAuthConsumer()也在尝试做同样的事情。你只需要其中一个。你尝试过注释掉twitter.setOAuthConsumer()这一行吗?

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


请查看我的编辑部分。如果被注释掉了会出现异常。 - sergionni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接