为什么我不能创建日历?

时间:2016-01-11 13:59:57

标签: android google-calendar-api google-signin

我在SignActivity中使用了Google SignIn,如下所示:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.server_client_id))
            .requestEmail()
            .requestProfile()
            .build();
// [END configure_signin]

// [START build_client]
// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
// [END build_client]

SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_WIDE);
signInButton.setScopes(gso.getScopeArray());

现在我可以获得令牌,电子邮件名称和其他信息。

我跟着this example 在我的其他活动中为给定的电子邮件创建日历,如下所示:

//for calendar start
static final int REQUEST_ACCOUNT_PICKER = 1000;
static final int REQUEST_AUTHORIZATION = 1001;
static final int REQUEST_GOOGLE_PLAY_SERVICES = 1002;
private static final String PREF_ACCOUNT_NAME = "accountName";
private static final String[] SCOPES = { CalendarScopes.CALENDAR };
GoogleAccountCredential mCredential;
com.google.api.services.calendar.model.Calendar calendar;
//for calendar end

 @Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    createBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // I take the email from my sign activity.
            String emailName = SignActivity.getPref(PREF_ACCOUNT_NAME, getApplicationContext());
            mCredential = GoogleAccountCredential.usingOAuth2(
                    getApplicationContext(), Arrays.asList(SCOPES))
                    .setBackOff(new ExponentialBackOff())
                    .setSelectedAccountName(emailName);
            if (isDeviceOnline()) {
                new MakeRequestTask(mCredential).execute();
            } else {
                descriptionEditText.setText("No network connection available.");
            }
        }
    });
    ...
}

和我的MakeRequestTask构造函数:

HttpTransport transport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
mService = new Calendar.Builder(
         transport, jsonFactory, credential)
         .setApplicationName("Test")
         .build();

并且我的问题是在try块的第一行的doInBackground函数中它无法执行并执行其他代码但奇怪的是我没有收到任何错误:

try{
    com.google.api.services.calendar.model.Calendar createdCalendar = mService.calendars().insert(calendar).execute();

    CalendarListEntry calendarListEntry = new CalendarListEntry();
    calendarListEntry.setId(createdCalendar.getId());
    calendarListEntry.setBackgroundColor(backGroundColor);
    calendarListEntry.setForegroundColor(foreGroundColor);
    // Insert the new calendar list entry
    CalendarListEntry createdCalendarListEntry = mService.calendarList().insert(calendarListEntry).execute();
        Log.i("summary", createdCalendarListEntry.getSummary());
    }catch (IOException e){
            Log.i("test1", e.getMessage());
    }

1 个答案:

答案 0 :(得分:1)

在我的createBtn onClick函数

我将以下代码添加到其他代码的顶部:

  

我不确定这是真正的解决方案。但是在我的旧代码中没有要求获得日历的许可,但现在它要求我给予许可。

if (mCredential.getSelectedAccountName() == null) {
    chooseAccount();
}

现在它正在运作。