0

私はAndroid開発に不慣れです。日付範囲内のすべてのイベントを追加/削除して取得する必要があるカレンダーアプリケーションに取り組んでいます。イベントを正常に追加および削除しましたが、問題は、日付範囲の間にカレンダーイベントを取得する場合です。カレンダーイベントを取得していますが、SPlannerにアクセスすると、すでに削除されているため、これらのイベントがカレンダーに追加されていないことがわかります。それらのイベントをどこから取得しているのかわかりません。提案してください。これが私がカレンダーイベントを取得するために書いたコードです:-

public void onGetEvent (final String fullCallbackName, String title,String startDate,String endDate) throws JSONException
    {
            try
            {
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                final ArrayList<JSONObject> calEvents = new ArrayList();
                 if(calEvents.size() !=0)
                 {
                      calEvents.clear();
                 }

                ContentResolver contentResolver = getContentResolver();
                String selection = "((dtstart >= "+(dateFormat.parse(startDate).getTime())+") AND (dtend <= "+(dateFormat.parse(endDate).getTime())+"))";

                Cursor cursor = contentResolver.query(Uri.parse(getCalendarUriBase() + "events"),
                       (new String[] { "_id", "title", "dtstart","dtend","eventLocation","description"}), selection, null, null);
                Log.e("cursor.getCount before:","callbackFuncName:" +  cursor.getCount());
                while (cursor.moveToNext()) {                       
                     String _id = cursor.getString(0);
                     String displayName = cursor.getString(1);
                        Log.e("cursor.getCount before:","callbackFuncName:" +  displayName);


                     String[] separated = displayName.split(":");
                     if(separated[0]!= null && title.equals(separated[0]))
                    {
                        JSONObject dictionary =  new JSONObject();

                        String dstart = dateFormat.format(new Date(Long.parseLong(cursor.getString(2))));//cursor.getString(2);    
                        String dEnd = dateFormat.format(new Date(Long.parseLong(cursor.getString(3))));//cursor.getString(3);  
                        String eventlocation = cursor.getString(4);   
                        String description = cursor.getString(5); 
                        dictionary.put("identifier", _id);
                        dictionary.put("title", displayName);
                        dictionary.put("startDate", dstart);
                        dictionary.put("endDate", dEnd);
                        dictionary.put("venue", eventlocation);
                        dictionary.put("notes", description);
                        calEvents.add(dictionary);


                    }
                }

                if(fullCallbackName != null && !fullCallbackName.equals(""))
                {
                        runOnUiThread(new Runnable() {
                        public void run()
                        {

                            webView.loadUrl("javascript:"+fullCallbackName+" ("+calEvents+")") ; 
                        }
                    });
                }


            }
            catch(Exception e)
            {
            Log.e("string", e.toString());
            }
        }

    }  

カレンダーDBを取得するためのコードは次のとおりです。-

private String getCalendarUriBase() {
        String calendarUriBase = null;
        Uri calendars = Uri.parse("content://calendar/calendars");
        Cursor cursor = null;
        try {
            cursor = managedQuery(calendars, null, null, null, null);
        } catch (Exception e) {
            // eat
        }

        if (cursor != null) {
            calendarUriBase = "content://calendar/";
        } else {
            calendars = Uri.parse("content://com.android.calendar/calendars");
            try {
                cursor = managedQuery(calendars, null, null, null, null);
            } catch (Exception e) {
                // eat
            }

            if (cursor != null) {
                calendarUriBase = "content://com.android.calendar/";
            }

        }
        Log.d("Sandeep",
                calendarUriBase);
       // managedCursor.close();
        return calendarUriBase;
    }
4

1 に答える 1

1

クエリを使用すると、削除されたイベントがデータベースに残っているため、削除されたイベントが表示されます (次の同期が必要になるたびに削除を同期できるため)。それがDELETED列の目的です。

開始日から終了日までのすべてのイベントを検索するには、次のコードのように CalendarContract APIのInstancesクラスを使用します。このコードは、可視イベントのみを返します!

私はCalendarContract コンテンツ プロバイダーに関するブログ記事を書きました。これについて詳しく説明しています。

   long begin = // starting time in milliseconds; for you probably cursor.getLong(2)
   long end = // ending time in milliseconds; cursor.getLong(3)
   String[] proj = 
         new String[]{
               Instances._ID, 
               Instances.TITLE,
               Instances.BEGIN,
               Instances.END,
               Instances.EVENT_LOCATION,
               Instances.DESCRIPTION,
               Instances.EVENT_ID};
   Cursor cursor = 
         Instances.query(getContentResolver(), proj, begin, end);
   if (cursor.getCount() > 0) {
      // do your JSON thing
   }
于 2013-03-23T21:07:47.880 に答える