2015-01-29 4 views
0

Я пытаюсь получить токен доступа Google Plus для подписанного пользователя в приложении для Android. Я делаю это с помощью следующего кода, который следует предложения, сделанные here, here и here:GoogleAuthUtil.getToken() blocks

private class RetrieveTokenTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... params) { 
     int REQUEST_CODE_TOKEN_AUTH = 466453; // Any number, not really using it anyway. 
     String accountName = params[0]; 
     String scopes = "oauth2:" + Plus.SCOPE_PLUS_LOGIN; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(getActivity(), accountName, scopes); 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), REQUEST_CODE_TOKEN_AUTH); 
     } catch (GoogleAuthException e) { 
      Log.e(TAG, e.getMessage()); 
     } 

     return token; 
    } 
} 

Я называю это так:

@Override 
public void onConnected(Bundle connectionHint) { 
    mSignInClicked = false; 

    Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 

    try { 
     String accessToken = (new RetrieveTokenTask()).execute(Plus.AccountApi.getAccountName(mGoogleApiClient)).get(); 
    } catch (Exception ex) { 
     Log.e(TAG, ex.getMessage()); 
    } 
} 

У меня есть следующие разрешения в моем AndroidManifest (среди другие):

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 

проблема не в том, что при вызове GoogleAuthUtil.getToken(), нет никакого прогресса бей и он просто замерзнет там. Как я могу это исправить?

ответ

1

Проблема заключается в том, что при вызове GoogleAuthUtil.getToken(), есть никакого прогресса не делается, и это будет просто замерзнуть там.

Потому что вы вызываете метод get()AsyncTask, которые делают Main UI ждать темы пока doInBackground вычисление не завершено

Как я могу это исправить?

Выполнить AsyncTask путем вызова метода execute и использовать onPostExecute получить accessToken

+0

Это просто быстро пытаются убедиться, что маркер поиска работает отлично. Я уточню, что после того, как я исправлю это, но реальный вопрос - почему метод getToken() не делает никакого прогресса? –

+0

@ VladSchnakovszki: Сначала удалите метод 'get()', затем проверьте его –

+0

@ VladSchnakovszki: а также убедитесь, что доступно разрешение INTERNET. –

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