2012-01-08 3 views
16

Я новичок в разработке android (и Java вообще). Я создаю приложение, которое требует, чтобы пользователь регистрировался, войдя в свою учетную запись Twitter, откуда их основную информацию импортируют и сохраняют. Необходимая информация: день рождения, имя (полные имена), имя пользователя, местоположение, пол и т. Д. Я использую twitter4j для достижения этой цели. Я пробовал смотреть документацию twitter4j, но, будучи новичком android (и java вообще), документация немного трудно понять, поэтому я, похоже, не могу заставить ее делать что-то другое, кроме как установить обновление состояния.Как получить имя пользователя Twitter с помощью Twitter 4j

Это код в моей деятельности:

package cc.co.localsquare.app; 

import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.widget.Toast; 
import oauth.signpost.OAuthProvider; 
import oauth.signpost.basic.DefaultOAuthProvider; 
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer; 
import oauth.signpost.exception.OAuthCommunicationException; 
import oauth.signpost.exception.OAuthExpectationFailedException; 
import oauth.signpost.exception.OAuthMessageSignerException; 
import oauth.signpost.exception.OAuthNotAuthorizedException; 
import twitter4j.Twitter; 
import twitter4j.TwitterFactory; 
import twitter4j.http.AccessToken; 

public class ConnectTwitterActivity extends BaseActivity { 

    public final static String CONSUMER_KEY = "valid key"; 
    public final static String CONSUMER_SECRET = "valid secret"; 
    public final static String CALLBACK_URL = "localsquare://ConnectTwitterActivity2"; 

    private CommonsHttpOAuthConsumer commonHttpOAuthConsumer; 
    private OAuthProvider authProvider; 

    private Twitter twitter; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.connect_twitter); 

     commonHttpOAuthConsumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
     authProvider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", 
      "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); 
     try { 
     String oAuthURL = authProvider.retrieveRequestToken(commonHttpOAuthConsumer, CALLBACK_URL); 
     this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(oAuthURL))); 
    } catch (OAuthMessageSignerException e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } catch (OAuthNotAuthorizedException e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } catch (OAuthExpectationFailedException e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } catch (OAuthCommunicationException e) { 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } 
    } 

    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 

     Uri uri = intent.getData(); 
     if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { 
     String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); 
     try { 
      authProvider.retrieveAccessToken(commonHttpOAuthConsumer, verifier); 

      AccessToken accessToken = new AccessToken(commonHttpOAuthConsumer.getToken(), 
       commonHttpOAuthConsumer.getTokenSecret()); 

      twitter = new TwitterFactory().getInstance(); 
      twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 

      twitter.setOAuthAccessToken(accessToken); 

      // Alternate way: 
      // twitter = new TwitterFactory().getOAuthAuthorizedInstance(CONSUMER_KEY, CONSUMER_SECRET, 
      //  new AccessToken(commonHttpOAuthConsumer.getToken(), commonHttpOAuthConsumer.getTokenSecret())); 

      // Tweet message to be updated. 
      String tweet = "Hi there, This was sent from my application - OAuth, Twitter"; 
      twitter.updateStatus(tweet); 

     } 
     catch (Exception e) { 
      Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_LONG); 
     } 
     } 
    } 

}

Как ТОЧНО я могу решить мою проблему?

ответ

13

Если у вас есть имя пользователя Twitter, для которого вам нужно получить информацию, вы можете использовать User user = twitter.showUser(screenName);. Теперь вы можете получить доступ к информации о пользователе, используя функции геттера на объекте user, например. user.getName(), user.getLocation() и т.д.

Не забывайте импортировать класс User в Eclipse. Как правило, вы также можете сделать это, нажав Ctrl + Shift + O in Eclipse.

+1

Спасибо, это сработало – nchima

+0

привет пулкит может помочь мне получить твитерский список следящих в android –

+0

эй Pulkit Goyal, что должно быть screenName здесь в twitter.showUser (screenName) ??? –

1

Используйте метод twitter.showUser(), чтобы получить информацию о пользователе. Чтобы получить имя пользователя, сделайте user.getName() Помните, что javadoc - ваш друг.

+0

user.getName () дает мне сообщение об ошибке eclipse «пользователь не может быть разрешен», а twitter.showUser() дает мне ошибку «Метод twitter.showUser (String) в типе Twitter не применим для аргументов()» – nchima

+0

И у меня есть посмотрел на javadoc, точно не помогает мне. – nchima

+0

Можете ли вы опубликовать код, в котором вы вызываете метод showUser()? –

2

Получите объект twitter из сеанса после завершения входа в систему. Это может быть использовано следующим образом, чтобы извлечь имя

Twitter twitter = (Twitter) request.getSession().getAttribute("twitter"); 
      long userID = twitter.getId(); 
      twitter4j.User newUser=twitter.showUser(twitter.getScreenName()); 
      String name=newUser.getName(); 

Вы можете изучить несколько методов из класса User, чтобы получить различные атрибуты пользователя, как изображение профиля, friendlistlength и т.д. @Vineet Бхатии