Twitter4j authentication credentials are missing

Nizar B. picture Nizar B. · Dec 17, 2013 · Viewed 12.4k times · Source

I would like to make a tweet with Twitter4j in my Android app. Here is my code:

 //TWITTER SHARE.
@Click (R.id. img_btn_twitter)
@Background
public void twitterPostWall(){

    try {


        //Twitter Conf.
        ConfigurationBuilder cb = new ConfigurationBuilder();
        cb.setDebugEnabled(true)
                .setOAuthConsumerKey(CONSUMER_KEY)
                .setOAuthConsumerSecret(CONSUMER_SECRET)
                .setOAuthAccessToken(ACCESS_KEY)
                .setOAuthAccessTokenSecret(ACCESS_SECRET);

        TwitterFactory tf = new TwitterFactory(cb.build());
        Twitter twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);

        try {
            RequestToken requestToken = twitter.getOAuthRequestToken();

            Log.e("Request token: ", "" + requestToken.getToken());
            Log.e("Request token secret: ", "" + requestToken.getTokenSecret());
            AccessToken accessToken = null;


        }

        catch (IllegalStateException ie) {

            if (!twitter.getAuthorization().isEnabled()) {
                Log.e("OAuth consumer key/secret is not set.", "");
            }
        }


        Status status = twitter.updateStatus(postLink);
        Log.e("Successfully updated the status to [", ""  + status.getText() + "].");

    }

    catch (TwitterException te) {
        Log.e("TWEET FAILED", "");

    }
}

I always get this error message from Twitter4j: java.lang.IllegalStateException: Authentication credentials are missing. See http://twitter4j.org/en/configuration.html for the detail. But as you can see I'm using builder to set my key. Can someone help me to fix it please? thanks.

Answer

Ritesh Gune picture Ritesh Gune · Dec 18, 2013

Problem is following lines.

TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = new TwitterFactory().getInstance();

You are passing the configuration to one TwitterFactory instance and using another TwitterFactory instance to get the Twitter instance.

Hence, You are getting java.lang.IllegalStateException: Authentication credentials are missing

I suggest you to modify your code as follows:

    //Twitter Conf.
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
            .setOAuthConsumerKey(CONSUMER_KEY)
            .setOAuthConsumerSecret(CONSUMER_SECRET)
            .setOAuthAccessToken(ACCESS_KEY)
            .setOAuthAccessTokenSecret(ACCESS_SECRET);

    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();

And use this twitter instance. It will work.