2016-06-23 1 views
-1

J'ai un petit problème avec mon code. J'utilise Android Studio. J'essaie de faire une application aux événements du calendrier du téléphone affichant l'heure. Je n'ai pas des erreurs mais quand j'essayé de courir à mon téléphoneLire les événements du calendrier Android

causés par:

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

Voici ma morue:

classe Java:

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); 
      } 
     } 
    } 


} 

MainActivity:

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); 
    } 
} 

Répondre

0

Premièrement, veuillez vérifier l'adresse uri. Par exemple 'content: // calendar/calendars', il n'est pas utilisé sur Android 2.1. Avant Android 14:

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

Après:

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

Cependant, vous feriez mieux d'utiliser comme ceci:

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

En second lieu, s'il vous plaît vérifier le nom de colonne de table. Vous pouvez imprimer les colonnes suivantes et jeter un coup d'œil. Troisièmement, la manière dont vous codez est très mauvaise. Vous devez déclarer ces paramètres ci-dessus comme des paramètres "statiques finaux".