1

カレンダーのイベントを 2 つの異なる方法で取得するために、同じクエリを作成しています。奇妙なことに、すべてがほぼ同じであるにもかかわらず、機能する方法と機能しない方法があります。timeMin を使用すると、Google の API Explorer の timeMax は、2 番目のメソッドが送信している時間に対して不正な要求を返します。

それだけでなく、Google カレンダー API のドキュメントでは、フィールドは start-min と start-max である必要があるとされていますが、クライアントと API Explorer では、フィールドは timeMin と timeMax である必要があります。

動作する方法 1 のコードは次のとおりです。

void setPeriod() {
    Date nowDate = new Date();
    startTime = new DateTime(nowDate);
    Time t = new Time();
    t.setToNow();
    t.hour = 23;
    t.minute = 59;
    nowDate.setTime(t.toMillis(false));
    endTime = new DateTime(nowDate);
}

new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
    try {
    Events evlist = g.getClient().events().list(calendarIds.get(cal)).setTimeMin(startTime).setTimeMax(endTime).execute();
    if (evlist.getItems() != null) {
        //Parse the events
    ...
}.execute();

方法 2:

new AsyncTask<Void, Void, List<Event>>() {
    @Override
protected List<Event> doInBackground(Void... arg0) {
    Date nowDate = new Date();
    DateTime startTime = new DateTime(nowDate);
    Time t = new Time();
    t.setToNow();
    t.hour = 23;
    t.minute = 59;
    nowDate.setTime(t.toMillis(true));
    DateTime endTime = new DateTime(nowDate);
    Calendar client = com.google.api.services.calendar.Calendar
                .builder(transport, jsonFactory)
                .setApplicationName("Wayk by Senti")
                .setHttpRequestInitializer(
                    new HttpRequestInitializer() {
                        public void initialize(HttpRequest request)
                                        throws IOException {
                                    request.getHeaders()
                                            .setAuthorization(
                                                    GoogleHeaders
                                                            .getGoogleLoginValue(authToken));
                                }
                            })
                    .setJsonHttpRequestInitializer(
                            new JsonHttpRequestInitializer() {

                                public void initialize(
                                        JsonHttpRequest request)
                                        throws IOException {
                                    CalendarRequest calendarRequest = (CalendarRequest) request;
                                    calendarRequest
                                            .setKey(CalendarClientCredentials.KEY);
                                }
                            }).build();
            try {
                List<Event> events = new ArrayList<Event>();
                for (int i = currentCal; i < enables.size(); i++) {
                    if (enables.get(i)) {
                        AiLog.v("Getting events");
                        AiLog.v("AuthToken: " + authToken);
                        AiLog.v("CalendarID: " + calendarIds.get(i));
                        AiLog.v("Calendar name: " + calendarNames.get(i));
                        AiLog.v("Calendar account: " + account);
                        Calendar.Events.List eventReq = client.events()
                                .list(calendarIds.get(i)).setTimeMin(startTime).setTimeMax(endTime).execute();//Bad request here

クライアントは両方でまったく同じであることに注意してください。2 番目のメソッドのクライアントは、アカウントのカレンダーのリストを正常に取得します。カレンダー ID が正しいことを確認しましたが、startMin と startMax からのエラーが残ります。

どんな助けでも感謝します。

乾杯、Z

4

1 に答える 1

10

理解した。

を受け入れるコンストラクターを使用する必要があります。DateTimeTimeZone

すなわち

DateTime startTime = new DateTime(new Date(), TimeZone.getDefault());

これにより、私がこれを理解するために費やした16時間を他の誰かが節約できることを願っています。本当に悪いドキュメント。

于 2012-07-19T22:11:38.883 に答える