2012-01-08 11 views
16

Jestem nowy w rozwoju Androida (i java w ogóle). Buduję aplikację, która wymaga rejestracji użytkownika, logując się na konto Twittera, skąd jego podstawowe informacje są importowane i zapisywane. Wymagane informacje to urodziny, imię (pełne imiona), nazwa użytkownika, lokalizacja, płeć itp. Używam twitter4j, aby to osiągnąć. Próbowałem, patrząc na dokumentację twitter4j, ale będąc początkującym androidem (i ogólnie java), dokumentacja jest trochę trudna do zrozumienia, więc wydaje mi się, że nie jestem w stanie zmusić go do zrobienia czegoś innego niż ustawienie aktualizacji statusu.Jak odzyskać nazwę użytkownika Twittera za pomocą Twittera 4j

Jest to kod w mojej działalności:

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

}

jak dokładnie mogę rozwiązać mój problem?

Odpowiedz

13

Jeśli masz nazwę użytkownika Twittera, dla którego chcesz uzyskać szczegółowe informacje, możesz użyć User user = twitter.showUser(screenName);. Teraz możesz uzyskać dostęp do informacji o użytkowniku za pomocą funkcji gettera na obiekcie user, np. user.getName(), user.getLocation() itp.

Pamiętaj o zaimportowaniu klasy User w środowisku Eclipse. Zwykle można to również zrobić, naciskając klawisze Ctrl + Shift + O w środowisku Eclipse.

+1

Dzięki temu zadziałało – nchima

+0

hi pulkit możesz mi pomóc pobrać listę obserwatorów Twitter w Androidzie –

+0

hej Pulkit Goyal, jaki powinien być screenName tutaj w twitter.showUser (screenName) ??? –

1

Użyj metody twitter.showUser(), aby uzyskać szczegóły użytkownika. Aby uzyskać nazwę użytkownika, należy: user.getName() Pamiętaj, że javadoc jest twoim przyjacielem.

+0

user.getName () daje mi komunikat o błędzie zaćmienia "użytkownik nie może być rozwiązany", a twitter.showUser() daje mi błąd "Metoda twitter.showUser (String) w typie Twitter nie ma zastosowania do argumentów()" – nchima

+0

I mam spojrzał na javadoc, nie pomaga mi dokładnie. – nchima

+0

Czy możesz umieścić kod w miejscu, w którym wywołujesz metodę showUser()? –

2

Uzyskaj obiekt Twittera z sesji po zakończeniu logowania. Które mogą być wykorzystane w następujący sposób wyodrębnić nazwę

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

można zbadać kilka metod z klasy User, aby uzyskać różne atrybuty użytkownika, jak profil obrazu, friendlistlength etc @Vineet Bhatia

Powiązane problemy