0

Android アプリケーションでサインインしているユーザーの Google Plus アクセス トークンを取得しようとしています。ここここここで行われた提案に従う次のコードを使用してこれを行っています。

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()、進行が行われず、そこでフリーズすることです。どうすればこれを修正できますか?

4

1 に答える 1

1

問題は、GoogleAuthUtil.getToken() を呼び出すときに、進行が行われず、そこでフリーズすることです。

計算が完了するまでメイン UI スレッドを待機させるget()メソッドを呼び出しているためAsyncTaskdoInBackground

どうすればこれを修正できますか?

メソッドをAsyncTask呼び出して 実行し、 onPostExecuteを使用して取得するexecuteaccessToken

于 2015-01-29T11:10:42.780 に答える