2012-03-26 2 views
1
public class TwitterActivity extends Activity 
    { 
     private Twitter twitter; 
     private OAuthProvider provider; 
     private CommonsHttpOAuthConsumer consumer; 

     String CONSUMER_KEY = "abcdefgh"; 
     String CONSUMER_SECRET = "abcdefgh"; 
     String CALLBACK = "twitterapp://connect"; 


     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      askOAuth(); 
     } 

     private void askOAuth() { 
      try { 
       consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
       provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", 
                "http://twitter.com/oauth/access_token", 
                "http://twitter.com/oauth/authorize"); 
       String authUrl = provider.retrieveRequestToken(consumer, CALLBACK); 
       Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show(); 
       this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); 
      } catch (Exception e) { 
       Log.e(APP, e.getMessage()); 
       Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     } 

     @Override 
     protected void onNewIntent(Intent intent) { 

      super.onNewIntent(intent); 

      Uri uri = intent.getData(); 
      if (uri != null && uri.toString().startsWith(CALLBACK)) { 

       String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); 

       try { 
        // this will populate token and token_secret in consumer 
        provider.retrieveAccessToken(consumer, verifier); 

        // TODO: you might want to store token and token_secret in you app settings!!!!!!!! 
        AccessToken a = new AccessToken(consumer.getToken(), consumer.getTokenSecret()); 

        // initialize Twitter4J 
        twitter = new TwitterFactory().getInstance(); 
        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); 
        twitter.setOAuthAccessToken(a); 

        // create a tweet 
        Date d = new Date(System.currentTimeMillis()); 
        String tweet = "#OAuth working! " + d.toLocaleString(); 

        // send the tweet 
        twitter.updateStatus(tweet); 

       } catch (Exception e) { 
        Log.e(APP, e.getMessage()); 
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); 
       } 

      } 
     } 
    } 


P.S.: I have used these api's 
    [1]: https://github.com/punitmg/Twitter-Test-App 
    [2]: https://github.com/grantland/twitter-android-sdk 
    [3]: https://github.com/yusuke/twitter4j/ 

Используя все эти API, я могу успешно чирикать. Но, к сожалению, приведенные ниже 2 экрана появляются во всех вышеупомянутых 3 случаях.Twitter Обратный звонок и вход в систему с помощью Jtwitter

Все, что я хочу, это закончить() или закрыть нижние два экрана, когда мой твит будет завершен.

So .... plz guide me if i was wrong ... 

screenshot1

screenshot2

+0

Я не хочу, чтобы эти 2 экрана оставались в стеке, когда я чирикал –

ответ

0

Вы должны заставить Войти во второй раз, чтобы решить эту проблему,

Так просто добавить force_login = True в вашем щебет авторизовать URL.

Я имею в виду просто изменить строку ниже кода в TwitterApp.java класс (если у вас есть файл класса с другим именем, то поиск в проекте с DefaultOAuthProvider)

mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", 
       "http://twitter.com/oauth/access_token", 
     "http://twitter.com/oauth/authorize?force_login=true"); 

после добавления force_login = true Проблема с загрузкой веб-браузера будет решена, но каждый раз, когда вам нужно ввести логин и пароль.

Смежные вопросы