无法为日历数据 com.google.android.gms.auth.UserRecoverableAuthException 获取 google 令牌:NeedPermission

Unable to get google token for calendar data com.google.android.gms.auth.UserRecoverableAuthException: NeedPermission

这是我的代码取自 [https://developers.google.com/google-apps/calendar/quickstart/android][1]

获取 google 日历事件它适用于我的电子邮件,该电子邮件用于从 google 开发人员控制台获得许可但无法获取其他电子邮件数据

private List<String> getDataFromApi() {
        // List the next 10 events from the primary calendar.
        DateTime now = new DateTime(System.currentTimeMillis());
        List<String> eventStrings = new ArrayList<String>();
        Events events = null;
        try {
            events = mService.events().list("primary")
                    .setMaxResults(30)
                    .setTimeMin(now)
                    .setOrderBy("startTime")
                    .setSingleEvents(true)
                    .execute();
        } catch (IOException e) {
            e.printStackTrace();
            Log.d("Meeting Planner :", "in get data from api " + e.getMessage());
            Log.d("Meeting Planner :", "in get data from api " + e.getLocalizedMessage());
            Log.d("Meeting Planner :", "in get data from api " + e.toString());
            //return null;
        }
        List<Event> items = events.getItems();




            eventStrings.add(
                    String.format("%s (%s)", event.getSummary(), start));
        }
        return eventStrings;
    }

根据您的参考。看起来用户还没有被分配令牌 那么您应该在 onCanceled ()

中使用此代码
if (mLastError instanceof UserRecoverableAuthIOException) {
                    startActivityForResult(
                            ((UserRecoverableAuthIOException) mLastError).getIntent(),
                            MainActivity.REQUEST_AUTHORIZATION);
                } else {
                    mOutputText.setText("The following error occurred:\n"
                            + mLastError.getMessage());

并且应该在 activity

中包含以下 activity 结果的方法
protected void onActivityResult(
        int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode) {

        case REQUEST_AUTHORIZATION:
            if (resultCode != RESULT_OK) {
                chooseAccount();
            }
            else {
                //your code to call make request again
                new MakeRequestTask(mCredential).execute();
            }
            break;
    }

    super.onActivityResult(requestCode, resultCode, data);
}