2012-01-08 1 views
16

Tôi mới phát triển Android (và java nói chung). Tôi đang xây dựng một ứng dụng yêu cầu người dùng đăng ký bằng cách đăng nhập vào tài khoản twitter của họ từ nơi thông tin cơ bản của họ được nhập và lưu. Thông tin bắt buộc sẽ là ngày sinh, tên (họ tên đầy đủ), tên người dùng, địa điểm, giới tính, v.v. Tôi đang sử dụng twitter4j để thực hiện việc này. Tôi đã thử nhìn vào tài liệu twitter4j nhưng là một newbie android (và java nói chung), tài liệu là một chút khó hiểu vì vậy tôi dường như không thể làm cho nó để làm một cái gì đó khác hơn là thiết lập một cập nhật trạng thái.Cách lấy tên người dùng twitter bằng cách sử dụng Twitter 4j

Đây là mã trong hoạt động của tôi:

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

}

Làm thế nào tôi có thể CHÍNH XÁC giải quyết vấn đề của tôi?

Trả lời

13

Nếu bạn có tên màn hình của người dùng twitter mà bạn cần lấy chi tiết, thì bạn có thể sử dụng User user = twitter.showUser(screenName); .Bạn có thể truy cập thông tin về người dùng bằng cách sử dụng hàm getter trên đối tượng user, ví dụ: user.getName(), user.getLocation() vv

Hãy nhớ nhập lớp User trong Eclipse. Nói chung, bạn cũng có thể làm điều đó bằng cách nhấn Ctrl + Shift + O trong Eclipse.

+1

Cảm ơn nó đã làm việc – nchima

+0

hi pulkit u có thể giúp tôi để lấy danh sách follower twitter trong android –

+0

hey Pulkit Goyal, những gì nên là screenName ở đây trong twitter.showUser (screenName) ??? –

1

Sử dụng phương thức twitter.showUser() để lấy chi tiết người dùng. Để có được tên người dùng làm user.getName() Hãy nhớ rằng javadoc là bạn của bạn.

+0

user.getName () cung cấp cho tôi một thông báo lỗi eclipse "người dùng không thể được giải quyết", và twitter.showUser() cho tôi một lỗi "Phương pháp twitter.showUser (String) trong loại Twitter không áp dụng cho các đối số()" – nchima

+0

Và tôi đã đã có một cái nhìn tại javadoc, không chính xác giúp tôi. – nchima

+0

Bạn có thể đăng mã nơi bạn đang gọi phương thức showUser() không? –

2

Nhận đối tượng twitter từ phiên khi đăng nhập hoàn tất. Điều đó có thể được sử dụng theo cách sau để trích xuất các tên

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

Bạn có thể khám phá một số phương pháp từ lớp người dùng để có được thuộc tính khác nhau của người sử dụng như hình ảnh hồ sơ cá nhân, friendlistlength vv @Vineet Bhatia