2012-04-28 59 views
3

嗨我想添加事件到Android日曆。我是android開發新手。請幫助我如何添加事件到Android日曆。這是我的代碼不起作用。當我運行它時,它給了我一個消息「應用程序日曆(process com.something.something)已經意外停止」並且具有「強制停止」這個按鈕。這裏是我的代碼使用java添加安卓日曆事件

package com.zafar.calendar; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 

public class Calendar extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Cursor cursor=getContentResolver().query(Uri.parse("content://com.android.calendar/calendars"), new String[]{"_id", "displayname"}, null, null, null); 

    cursor.moveToFirst(); 
    // Get calendars name 
    String calendarNames[] = new String[cursor.getCount()]; 
    // Get calendars id 
    int[] calendarId = new int[cursor.getCount()]; 
    for (int i = 0; i < calendarNames.length; i++) 
    { 
      calendarId[i] = cursor.getInt(0); 
      calendarNames[i] = cursor.getString(1); 
      cursor.moveToNext(); 
    } 
    cursor.close(); 

    ContentValues contentEvent = new ContentValues(); 
    contentEvent.put("calendar_id", 1); 
    contentEvent.put("title", "Wedding"); 
    contentEvent.put("eventLocation", "New York"); 
    contentEvent.put("dtstart","1335432431000"); 
    contentEvent.put("dtend","1335436031000"); 

    Uri eventsUri = Uri.parse("content://com.android.calendar/events"); 
    getContentResolver().insert(eventsUri, contentEvent); 

} 
} 

更新 這裏是我的menifest文件

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".Calendar" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission> 
    <uses-permission android:name="android.permission.WRITE_CALENDAR"></uses-permission> 
</application> 

logcat的

我是新android開發。我完全不知道logcat。我跑在命令提示符下的logcat條命令,我在你的代碼得到這個

04-28 09:16:57.956: D/AndroidRuntime(333): Shutting down VM 
04-28 09:16:57.956: W/dalvikvm(333): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
04-28 09:16:57.975: E/AndroidRuntime(333): FATAL EXCEPTION: main 
04-28 09:16:57.975: E/AndroidRuntime(333): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zafar.calendar/com.zafar.calendar.Calendar}: java.lang.NullPointerException 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.os.Looper.loop(Looper.java:123) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-28 09:16:57.975: E/AndroidRuntime(333): at java.lang.reflect.Method.invokeNative(Native Method) 
04-28 09:16:57.975: E/AndroidRuntime(333): at java.lang.reflect.Method.invoke(Method.java:507) 
04-28 09:16:57.975: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-28 09:16:57.975: E/AndroidRuntime(333): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-28 09:16:57.975: E/AndroidRuntime(333): at dalvik.system.NativeStart.main(Native Method) 
04-28 09:16:57.975: E/AndroidRuntime(333): Caused by: java.lang.NullPointerException 
04-28 09:16:57.975: E/AndroidRuntime(333): at com.zafar.calendar.Calendar.onCreate(Calendar.java:51) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-28 09:16:57.975: E/AndroidRuntime(333): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
04-28 09:16:57.975: E/AndroidRuntime(333): ... 11 more 
04-28 09:21:58.095: I/Process(333): Sending signal. PID: 333 SIG: 9 
+0

你給了'' '' – 2012-04-28 08:37:11

+0

是的,我使用權限,你現在可以看到這個清單文件了,怎麼解決這個問題? – 2619 2012-04-28 08:39:49

+0

Uri.parse(」content://com.android.calendar/calendar「)更改爲Uri.parse(」content://com.android.calendar/Calendars「) – 2012-04-28 08:41:41

回答

3

錯誤:

  1. new String[]{"calendar_id", "displayname"}, null, null, null);

沒有列上存在名稱CALENDAR_ID在日曆數據庫。正確的是_id not calendar_id。所以它會是新的String [] {「_id」,「displayname」},null,null,null);

請參閱此參考。 https://stackoverflow.com/a/10310258http://android.arnodenhond.com/tutorials/calendar

EDIT

爲了插入新的事件,則需要3個值。 Calendar_id,EventStartTime和EventEndTime。沒有這些值,你不能插入新事件。 EventStartTime和EventEndTime需要時代格式。

對於正常日期劃時代日期:https://stackoverflow.com/a/6687502/1160207
對於劃時代正常日期:https://stackoverflow.com/a/10028980/1160207

這裏是一個完美的工作,我的代碼。

Cursor cursor=getContentResolver().query(Uri.parse("content://com.android.calendar/calendars"), new String[]{"_id", "displayname"}, null, null, null); 

cursor.moveToFirst(); 
// Get calendars name 
String calendarNames[] = new String[cursor.getCount()]; 
// Get calendars id 
int[] calendarId = new int[cursor.getCount()]; 
for (int i = 0; i < calendarNames.length; i++) 
{ 
     calendarId[i] = cursor.getInt(0); 
     calendarNames[i] = cursor.getString(1); 
     cursor.moveToNext(); 
} 
cursor.close(); 

ContentValues contentEvent = new ContentValues(); 
contentEvent.put("calendar_id", 1); 
contentEvent.put("title", "Wedding"); 
contentEvent.put("eventLocation", "New York");     
contentEvent.put("dtstart","1335432431000"); 
contentEvent.put("dtend","1335436031000"); 


Uri eventsUri = Uri.parse("content://com.android.calendar/events"); 
getContentResolver().insert(eventsUri, contentEvent); 

希望這會對你有幫助。如果它對您有幫助,請不要忘記接受它。

謝謝...

+0

我跟着你的兩個參考文件,但它仍然是同樣的錯誤,我也將calender_id更改爲_id,但它沒有解決問題。 – 2619 2012-04-28 09:08:12

+0

po st你的logcat – 2012-04-28 09:12:39

+0

這是什麼logcat是? – 2619 2012-04-28 09:27:16

0

如果有要與整合,聯繫他們的開發人員,並確定他們是否提供了一個API特定的日曆應用程序。因此,例如,Mayra引用的來自Android開放源代碼項目的日曆應用程序不提供記錄和支持的API。 Google甚至明確告訴開發者不要使用Mayra引用的教程中概述的技術。

另一種選擇是讓您將事件添加到Internet日曆中。例如,將事件添加到Android開放源代碼項目的日曆應用程序的最佳方式是通過相應的GData API將事件添加到用戶的Google日曆。