0

I am trying to log into Twitter, but I can't get my user profile picture.

Here is my code, using a Custom Twitter button.

  TwitterCore.getInstance().logIn(LoginActivity.this, new com.twitter.sdk.android.core.Callback<TwitterSession>() {
        @Override
        public void success(Result<TwitterSession> result) {

            session = result.data;
            authClient.requestEmail(session, new com.twitter.sdk.android.core.Callback<String>() {
                @Override
                public void success(Result<String> result) {
                    // Do something with the result, which provides the email address
                    String getUsername = session.getUserName();
                    userid = (int) session.getUserId();
                    int getprovider = (int) session.getId();
                    String photoUrlNormalSize  =result.data.profileImageUrl;
                    Twitter twitter = new TwitterFactory().getInstance();
                    Log.i("getnamdfsge", "" + getUsername);
                    Log.i("succccesss", "" + result.data);
                }

                @Override
                public void failure(TwitterException exception) {
                    // Do something on failure
                    Log.i("succccesss", "" + exception);
                }
            });

        }

        @Override
        public void failure(TwitterException exception) {
            Log.i("exeeeeee", "" + exception.toString());
        }

    });

The error is happening at

String photoUrlNormalSize  =result.data.profileImageUrl;
ChrisGPT was on strike
  • 127,765
  • 105
  • 273
  • 257

1 Answers1

0

Here is how I managed to get Twitter user data:

Firstly, I used Twitter4j

Call below methods in your onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  initTwitterConfigs();
  initTwitter();
}

/* Reading twitter essential configuration parameters from strings.xml */

Save your consumer key, secret key and callback url in strings.xml

private void initTwitterConfigs() {
    consumerKey = getString(R.string.twitter_consumer_key);
    consumerSecret = getString(R.string.twitter_consumer_secret);
    callbackUrl = getString(R.string.twitter_callback);
    oAuthVerifier = getString(R.string.twitter_oauth_verifier);
}

private void initTwitter() {
    Uri uri = getIntent().getData();

    if (uri != null && uri.toString().startsWith(callbackUrl)) {
     String verifier = uri.getQueryParameter(oAuthVerifier);
      try {
        /* Getting oAuth authentication token */
        twitter4j.auth.AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
                /* save updated token */
        saveTwitterInfo(accessToken);
      } catch (Exception e) {
        Log.e("TAG", "Login failed" + e.getMessage());
      }
    }
}

On click of Twitter login button call below method:

private void loginToTwitter() {
        final ConfigurationBuilder builder = new ConfigurationBuilder();
        builder.setOAuthConsumerKey(consumerKey);
        builder.setOAuthConsumerSecret(consumerSecret);

        final Configuration configuration = builder.build();
        final TwitterFactory factory = new TwitterFactory(configuration);
        twitter = factory.getInstance();

        try {
            requestToken = twitter.getOAuthRequestToken(callbackUrl);
            final Intent intent = new Intent(this, WebViewActivity.class);
            intent.putExtra(WebViewActivity.EXTRA_URL, requestToken.getAuthenticationURL());
            startActivityForResult(intent, TWITTER_REQUEST_CODE);

        } catch (TwitterException e) {
            e.printStackTrace();
        }
}

In you onActivityResult, access the user details as below:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

      super.onActivityResult(requestCode, resultCode, data);

      if (requestCode == TWITTER_REQUEST_CODE) {
        String verifier = data.getExtras().getString(oAuthVerifier);
        try {
             twitter4j.auth.AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
             saveTwitterInfo(accessToken);

        } catch (Exception e) {
                Log.e("Twitter Login Failed", e.getMessage());
        }
      }
}


private void saveTwitterInfo(twitter4j.auth.AccessToken accessToken) {

    long userID = accessToken.getUserId();
    String uid = accessToken.getUserId() + "";
    User user;
    try {
     user = twitter.showUser(userID);
     String username = user.getName();
     String fullName = user.getName();
     String profileImage = user.getOriginalProfileImageURL();
     String location = user.getLocation();

    } catch (TwitterException e1) {
     e1.printStackTrace();
    }
}

Hope this works for you.

Sanket Mendon
  • 403
  • 5
  • 11
  • Add this line in your build.gradle inside dependencies and sync your project: compile group: 'org.twitter4j', name: 'twitter4j-core', version: '4.0.1' – Sanket Mendon Sep 20 '17 at 07:41
  • If this doesn't work go to the link and download the Twitter4j jar. Add it to your project's libs folder and compile it by adding this line to your gradle's dependencies: compile fileTree(dir: 'libs', include: ['*.jar']) . Here is the link [MVN](https://mvnrepository.com/artifact/org.twitter4j/twitter4j-core/4.0.1) – Sanket Mendon Sep 20 '17 at 07:44