2012-01-08 5 views
16

Sono nuovo nello sviluppo di Android (e Java in generale). Sto creando un'applicazione che richiede l'accesso di un utente effettuando l'accesso al proprio account Twitter da dove vengono importate e salvate le informazioni di base. Le informazioni richieste sarebbero compleanno, nome (nome completo), nome utente, posizione, sesso, ecc. Sto usando twitter4j per realizzare questo. Ho provato a guardare la documentazione di twitter4j ma essendo un principiante di Android (e Java in generale), la documentazione è un po 'difficile da capire, quindi non riesco a farlo fare qualcosa di diverso dall'impostare un aggiornamento di stato.Come recuperare il nome di un utente di Twitter utilizzando Twitter 4j

Questo è il codice nella mia attività:

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

}

esattamente come posso risolvere il mio problema?

risposta

13

Se si dispone del nome di schermo dell'utente twitter per il quale è necessario ottenere i dettagli, è possibile utilizzare User user = twitter.showUser(screenName);. Ora è possibile accedere alle informazioni sull'utente utilizzando le funzioni getter sull'oggetto user, ad es. user.getName(), user.getLocation() ecc.

Ricordarsi di importare la classe User in Eclipse. In genere è anche possibile farlo premendo Ctrl + Shift + O in Eclipse.

+1

Grazie ha funzionato – nchima

+0

hi pulkit puoi aiutarmi a recuperare l'elenco follower di twitter in android –

+0

hey Pulkit Goyal, quale dovrebbe essere lo screenName qui su twitter.showUser (screenName) ??? –

1

Utilizzare il metodo twitter.showUser() per ottenere i dettagli dell'utente. Per ottenere il nome utente fare user.getName() Ricorda javadoc è tuo amico.

+0

user.getName () mi dà un messaggio di errore eclissi "utente non può essere risolto", e twitter.showUser() mi dà un errore "Il metodo twitter.showUser (String) nel tipo Twitter non è applicabile per gli argomenti()" – nchima

+0

E ho ho dato un'occhiata al javadoc, non mi aiuta esattamente. – nchima

+0

Puoi pubblicare il codice in cui stai invocando il metodo showUser()? –

2

Ottenere l'oggetto twitter dalla sessione al termine del login. Che può essere utilizzato nel modo seguente per estrarre il nome

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

È possibile esplorare diversi metodi dalla classe utente per ottenere diversi attributi di utenti immagini di profilo, ecc friendlistlength come @Vineet Bhatia