2012-01-08 13 views
16

Soy nuevo en el desarrollo de Android (y Java en general). Estoy creando una aplicación que requiere que un usuario se registre iniciando sesión en su cuenta de Twitter desde donde se importa y guarda su información básica. La información requerida sería cumpleaños, nombre (nombres completos), nombre de usuario, ubicación, sexo, etc. Estoy usando twitter4j para lograr esto. He intentado buscar en la documentación de twitter4j pero al ser un novato en Android (y java en general), la documentación es un poco difícil de entender, así que parece que no puedo lograr que haga algo más que establecer una actualización de estado.Cómo recuperar el nombre de un usuario de Twitter usando Twitter 4j

Este es el código en mi actividad:

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

}

cómo es exactamente lo puedo resolver mi problema?

Respuesta

13

Si tiene el nombre de usuario de twitter para el que necesita obtener los detalles, puede usar User user = twitter.showUser(screenName);. Ahora puede acceder a la información sobre el usuario mediante el uso de funciones getter en el objeto user, p. user.getName(), user.getLocation() etc.

Recuerde importar la clase User en Eclipse. En general, también puede hacerlo presionando Ctrl + Shift + O en Eclipse.

+1

Gracias funcionó – nchima

+0

Hola pulkit me puedes ayudar a buscar la lista de seguidores de Twitter en Android –

+0

hey Pulkit Goyal, ¿cuál debería ser el nombre de pantalla aquí en twitter.showUser (screenName) ??? –

1

Utilice el método twitter.showUser() para obtener los detalles del usuario. Para obtener el nombre del usuario, haz user.getName() Recuerda que javadoc es tu amigo.

+0

user.getName () me da un mensaje de error de eclipse "usuario no se puede resolver", y twitter.showUser() me da un error "El método twitter.showUser (String) en el tipo Twitter no es aplicable para los argumentos()" – nchima

+0

y tengo eché un vistazo al javadoc, no me ayudó exactamente. – nchima

+0

¿Puedes publicar el código en el que estás invocando el método showUser()? –

2

Obtiene el objeto de twitter de la sesión una vez que el inicio de sesión está completo. Que se puede utilizar de la siguiente manera para extraer el nombre

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

Usted puede explorar varios métodos de la clase de usuario para obtener diferentes atributos de perfil de usuario de la imagen, etc friendlistlength como @Vineet Bhatia

Cuestiones relacionadas