2013-07-08 3 views
1

Я включил Twitter в мое приложение (используя OAuth и twitter4j), чтобы обновить статус на учетной записи пользователя от имени пользователя. Это хорошо работает.Android-twitter4j Исключение - нет проблем с проверкой подлинности

Перед обновлением статуса я зарегистрирую Shared Preferences для хранения AccessToken. Если он доступен, то есть пользователь вошел в систему, а затем обновил статус, иначе пользователь не войдет в систему и, следовательно, отобразит страницу Twitter для входа пользователя.

Проблема заключается в том, что если пользователя после входа в и, следовательно, меня AccessToken в Shared Preferences и теперь, если пользователь аннулирует разрешение от приложения, и я пытаюсь опубликовать статус, то это дает это исключение или ошибку ,

enter image description here

Как я пришел, чтобы узнать, что пользователь отменил разрешение и, таким образом, я должен просить разрешения?

EDIT: Я узнал, как обрабатывать случай необоснованного доступа, и я обработал его. Но все же это исключение бросается.

ответ

0

Я решил эту проблему. Проблема заключалась в том, что я тестировал, что он делает, когда пользователь несанкционирует приложение. И я несанкционировал приложение из учетной записи Twitter, которую я использовал для создания приложения на dev.twitter.com. Выполнение этого недействительного моего accesstoken, которое хранилось в общих предпочтениях и, следовательно, в моем коде, когда я извлекал его из общих настроек и использовал его, я использовал исключение.

Решение заключается в воссоздании accesstoken в приложении, созданном на dev.twitter.com. И в моем коде я добавил это условие:

catch (TwitterException e) { 

    if (e.getStatusCode() == -1) { 

     // This is the case when the developer who created the application has revoked the application permission. 
     // In this case we need to remove stored access token as it is no longer valid. 
     // Logging in again will fetch newer accesstoken and will solve the problem. 
     logoutFromTwitter(); 
     loginToTwitter(); 
    } 
} 
+0

и это правильный ответ? (-1) – BlaShadow

+0

@BlaShadow Да, это правильный ответ на вопрос, который задал вопрос. Вот что важно. – Geek

+0

это не ошибка/проблема из twitter4j, вы - ошибка. как это может помочь кому угодно? – BlaShadow

3

Это может показаться странным, но попробуйте установить автоматическое обновление времени/даты. Основываясь на моем предыдущем опыте, это была проблема. Когда я устанавливаю это и после того, как время телефона синхронизировано, все работает нормально.

Тогда попробуйте это: -

// ConfigurationBuilder 
ConfigurationBuilder builder = new ConfigurationBuilder(); 
builder.setOAuthConsumerKey(twitterConsumerKey); 
builder.setOAuthConsumerSecret(twitterConsumerSecret); 

// Access Token from sharedPreference 
String access_token = mSharedPreferences.getString(TwitterConstants.PREF_KEY_OAUTH_TOKEN, ""); 
// Access Token Secret from sharedPreference 
String access_token_secret = mSharedPreferences.getString(TwitterConstants.PREF_KEY_OAUTH_SECRET, ""); 

AccessToken accessToken = new AccessToken(access_token, access_token_secret); 
twitter = new TwitterFactory(builder.build()).getInstance(accessToken); 

// Getting user details from twitter 
// For now i am getting his name only 
long userID = accessToken.getUserId(); 
User user = twitter.showUser(userID); 
String username = user.getName() + " (" + user.getScreenName() + ")"; 
+0

он уже настроен для автоматического обновления. – Geek