2016-06-23 24 views
-1

Ich habe ein kleines Problem mit meinem Code. Ich verwende Android Studio. Ich versuche, eine Anwendung für die Kalenderereignisse des Telefons zu erstellen, die die Uhrzeit anzeigen. Ich habe keine Fehler, aber wenn ich versuchte, es auf mein HandyLesen Sie Ereignisse aus Android-Kalender

verursacht laufen von:

java.lang.NullPointerException 
at net.jimblackler.readcalendar.Example.readCalendar(Example.java:29) 
                        at net.jimblackler.readcalendar.MainActivity.onCreate(MainActivity.java:14) 

Hier ist mein cod:

Java-Klasse:

import java.util.Date; 
import java.util.HashSet; 

import android.content.ContentResolver; 
import android.content.ContentUris; 
import android.content.Context; 
import android.database.Cursor; 
import android.net.Uri; 
import android.text.format.DateUtils; 

public class Example { 

    public static void readCalendar(Context context) { 

     ContentResolver contentResolver = context.getContentResolver(); 

     // Fetch a list of all calendars synced with the device, their display names and whether the 
     // user has them selected for display. 

     final Cursor cursor = contentResolver.query(Uri.parse("content://calendar/calendars"), 
       (new String[] { "_id", "displayName", "selected" }), null, null, null); 


     HashSet<String> calendarIds = new HashSet<String>(); 


     while (cursor.moveToNext()) { 

      final String _id = cursor.getString(0); 
      final String displayName = cursor.getString(1); 
      final Boolean selected = !cursor.getString(2).equals("0"); 

      System.out.println("Id: " + _id + " Display Name: " + displayName + " Selected: " + selected); 
      calendarIds.add(_id); 
     } 

     // For each calendar, display all the events from the previous week to the end of next week. 
     for (String id : calendarIds) { 
      Uri.Builder builder = Uri.parse("content://calendar/instances/when").buildUpon(); 
      long now = new Date().getTime(); 
      ContentUris.appendId(builder, now - DateUtils.WEEK_IN_MILLIS); 
      ContentUris.appendId(builder, now + DateUtils.WEEK_IN_MILLIS); 

      Cursor eventCursor = contentResolver.query(builder.build(), 
        new String[] { "title", "begin", "end", "allDay"}, "Calendars._id=" + id, 
        null, "startDay ASC, startMinute ASC"); 


      while (eventCursor.moveToNext()) { 
       final String title = eventCursor.getString(0); 
       final Date begin = new Date(eventCursor.getLong(1)); 
       final Date end = new Date(eventCursor.getLong(2)); 
       final Boolean allDay = !eventCursor.getString(3).equals("0"); 

       System.out.println("Title: " + title + " Begin: " + begin + " End: " + end + 
         " All Day: " + allDay); 
      } 
     } 
    } 


} 

HauptAktivität:

package net.jimblackler.readcalendar; 

import android.app.Activity; 
import android.os.Bundle; 



public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Example.readCalendar(this); 
    } 
} 

Antwort

0

Bitte überprüfen Sie zuerst die Adresse der Adresse. Zum Beispiel "content: // Kalender/Kalender", es wird nicht über Android 2.1 verwendet. Bevor Android 14:

calanderURL = "content://calendar/calendars"; 
calanderEventURL = "content://calendar/events"; 
calanderRemiderURL= "content://calendar/reminders"; 

Nach:

calanderURL = "content://com.android.calendar/calendars"; 
calanderEventURL = "content://com.android.calendar/events"; 
calanderRemiderURL = "content://com.android.calendar/reminders"; 

Allerdings sollten Sie besser wie folgt verwenden:

private Uri calendarsUri = Calendars.CONTENT_URI; 
private Uri eventsUri = Events.CONTENT_URI; 
private Uri remindersUri = Reminders.CONTENT_URI; 
private Uri attendeesUri = Attendees.CONTENT_URI; 

Zweitens, überprüfen Sie bitte die Tabelle Spaltennamen. Sie können die folgenden Spalten drucken und einen Blick darauf werfen.

Drittens, Sie Code-Art ist sehr schlecht. Sie sollten diese oben genannten Parameter als 'statische endgültige' deklarieren.