GoogleAuthUtil.getToken()阻止

时间:2015-01-29 11:08:53

标签: android google-plus google-plus-signin

我正在尝试为我的Android应用中的已登录用户检索Google Plus访问令牌。我使用以下代码执行此操作,该代码遵循hereherehere提出的建议:

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 个答案:

答案 0 :(得分:1)

  

问题在于,当调用GoogleAuthUtil.getToken()时,有   没有取得任何进展,它只会冻结在那里。

因为您正在调用get()方法AsyncTask,这使得主UI线程等待doInBackground计算未完成

  

我该如何解决这个问题?

通过调用AsyncTask方法执行execute并使用onPostExecute获取accessToken