2012-07-16 10 views
10

Próbuję zintegrować moją aplikację webową z Twitter za pomocą twitter4j lib.
Mam zarejestrowaną aplikację na stronie Twitter i otrzymałem wartości Consumer key i Consumer secret.
Nic specjalnego, standard OAuth Krok.Integracja z Twitterem: klucz konsumenta/tajna para już ustawiona

Kod:

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); 
... 

wyjątek:

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

nie mam więcej konfigurację key i secret, każdy .properties lub inny plik.

EDIT:

komentując linia twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); powoduje wyjątek: jest

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

Odpowiedz

30

Patrząc na kod i dokumentację, wygląda na to, że nie jest zalecana metoda tworzenia instancji Twitter. Jeśli chcesz dostarczać konfigurację programowo (i nie używać właściwości), wygląda na to, że musisz dostarczyć Configuration do TwitterFactory.

 
... 
ConfigurationBuilder builder = new ConfigurationBuilder(); 
builder.setOAuthConsumerKey(CONSUMER_KEY); 
builder.setOAuthConsumerSecret(CONSUMER_SECRET); 
Configuration configuration = builder.build(); 
TwitterFactory factory = new TwitterFactory(configuration); 
Twitter twitter = factory.getInstance(); 
... 

Singletor dostarczane przez fabryki, które nie zostały dostarczone z domyślnych ustawień konfiguracyjnych do korzystania implementację Authorization poparte konfiguracji PropertyConfiguration. Jeśli nie ma pliku właściwości, to wygląda, tak jak nie powinien tworzyć instancji certyfikatu OAuthAuthorization, co spowodowałoby wyjątek, który widzisz. Ale PropertyConfiguration przeszukuje cały plik CLASSPATH dla odpowiedniego pliku właściwości, więc może przeoczyłeś jeden. Można spróbować zalogowaniu prawy klawisz i tajny po otrzymaniu wystąpienia Twitter aby zobaczyć, co oni zestaw do:

 
System.out.println("key:" + twitter.getConfiguration().getOAuthConsumerKey()); 
System.out.println("secret: " + twitter.getConfiguration().getOAuthConsumerSecret()); 
+1

miłe, dziękuję Araxia, który działa dla mnie – sergionni

+0

Grt pracy, thx ..! –

0

Mam przeczucie, że jesteś ustawienie zmiennych prywatnych i końcowe następnie twitter.setOAuthConsumer() próbuje zrobić to samo . Powinieneś potrzebować tylko jednego lub drugiego. Czy próbowałeś skomentować linię twitter.setOAuthConsumer()?

The Docs wyjaśnić "preferowany" sposób ustawić je.

+0

patrz mi punkt edycji, wyjątek please.Got jeśli skomentował – sergionni