2013-12-05 2 views
0

Я делаю приложение, которое получает только твиты с определенной страницы в android. Я использую версию twitter4j версии 3.0.5. Вот мой код ниже:Android Twitter4j - TwitterException (Нет проблем с проверкой подлинности.)

@Override 
    protected String doInBackground(String... credentials) { 
     // TODO Auto-generated method stub 
     oAuth_ConsumerKey = credentials[0]; 
     oAuth_ConsumerSecret = credentials[1]; 
     accessToken = credentials[2]; 
     accessTokenSecret = credentials[3]; 

     System.out.println("Credentials -------- " + oAuth_ConsumerKey 
       + "\n" + oAuth_ConsumerSecret + "\n" + accessToken + "\n" 
       + accessTokenSecret); 

     ConfigurationBuilder builder = new ConfigurationBuilder(); 
     builder.setOAuthConsumerKey(oAuth_ConsumerKey) 
     .setOAuthConsumerSecret(accessTokenSecret); 
     builder.setOAuthAccessToken(accessToken); 
     builder.setOAuthAccessTokenSecret(accessTokenSecret); 

     TwitterFactory twitterFactory = new TwitterFactory(builder.build()); 
     Twitter twitter = twitterFactory.getInstance(); 

     try { 
      List<twitter4j.Status> statuses; 
      String user = "@pagename"; 

      statuses = twitter.getUserTimeline(user); 
      for (int i = 0; i < statuses.size(); i++) { 
       twitter4j.Status status = statuses.get(i); 
       Log.i("Tweet Count " + (i + 1), status.getText() + "\n\n"); 
      } 
     } catch (TwitterException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

(. Приведенный выше код делается в doInBackground способе AsyncTask Просто думал, что вы должны знать)

И я получаю сообщение об ошибке сказав: No authentication challenges found. Relevant discussions can be found on the Internet at: ...

Я просмотрел предыдущие сообщения и сказал, чтобы проверить дату и время. Я сделал это, и они все правильные и настроены на автоматическое. (Поскольку у меня медленное подключение к Интернету), я также попытался запустить его на более быстром интернет-соединении. Теперь я думаю, что с моим кодом что-то не так.

Я новичок в интеграции twitter в мое приложение для Android, поэтому объяснительное руководство также будет полезно вместе с ответом.

Спасибо ...

+0

Возможный дубликат [Твиттер 4j Нет проблем с проверкой подлинности, релевантные обсуждения можно найти в Интернете Исключение] (http://stackoverflow.com/questions/17103234/twitter-4j-no-authentication-challenges-found-relevant- дискуссии-могут быть найдены) –

+0

ну да говоря с точки зрения поднятого исключения, это дубликат многочисленных вопросов. Что касается моего вопроса, то я не пытаюсь опубликовать что-либо на странице Twitter. Я просто требую, чтобы я получил твиты. Во-вторых, я новичок в интеграции twitter и, как я уже говорил выше, я пробовал то, что рекомендовали другие сообщения. Согласно вашей ссылке на вопрос, наш код имеет разные цели и делает разные вещи. Но спасибо за уведомление в любом случае. – SynerFlow

ответ

0

Twitter4j приспосабливается singletone и сохраняет свой статус входа/аутентификации и вызывает исключения каждый раз при попытке войти/аутентификации

То, что вы должны сделать, это Отделить Логин аутентификации от остальные вызовов API. в вашем случае вам нужно что-то вроде этого:

private Twitter mTwitter; 
private void login(String[] credentials){ 
    String oAuth_ConsumerKey = credentials[0]; 
    String oAuth_ConsumerSecret = credentials[1]; 
    String accessToken = credentials[2]; 
    String accessTokenSecret = credentials[3]; 

    System.out.println("Credentials -------- " + oAuth_ConsumerKey 
      + "\n" + oAuth_ConsumerSecret + "\n" + accessToken + "\n" 
      + accessTokenSecret); 

    ConfigurationBuilder builder = new ConfigurationBuilder(); 
    builder.setOAuthConsumerKey(oAuth_ConsumerKey) 
    .setOAuthConsumerSecret(accessTokenSecret); 
    builder.setOAuthAccessToken(accessToken); 
    builder.setOAuthAccessTokenSecret(accessTokenSecret); 

    TwitterFactory twitterFactory = new TwitterFactory(builder.build()); 
    mTwitter = twitterFactory.getInstance(); 
} 

private List<Status> getTimeLine(){ 

    List<twitter4j.Status> statuses = null; 
    try { 

     String user = "@pagename"; 

     statuses = mTwitter.getUserTimeline(user); 
     for (int i = 0; i < statuses.size(); i++) { 
      twitter4j.Status status = statuses.get(i); 
      Log.i("Tweet Count " + (i + 1), status.getText() + "\n\n"); 
     } 

    } catch (TwitterException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return statuses; 

}

Убедитесь, что вы называете оба метода из фонового потока и вызовите Логин раз каждый прогон.

+0

Я получаю ошибку лифта андроида (красная строка ниже кода) в 'getTimeline() {Twitter twitter = twitterFactory.getInstance();' говоря, что он не может быть разрешен для типа. (Ниже twitterFactory.getInstance();) – SynerFlow

+0

жаль, что вам нужно сохранить ссылку на объект Twitter вместо того, чтобы просить его снова, я изменил код –

+0

Привет, я все равно получаю ту же ошибку. Не могли бы вы показать мне, как вы это делаете в 'doInBackground' в' AsyncTask'. – SynerFlow

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