Android: Wie füge ich mit dem SDK einen Kontakt zur SIM-Karte hinzu?

Ich schreibe eine Anwendung, mit der Kontakte auf die SIM-Karte eines Android-Telefons geschrieben werden. Ich stecke an der Stelle fest, an der die Telefonnummer hinzugefügt wurde: Eine Ausnahme tritt ohne ersichtlichen Grund auf.

Hier ist ein Codeausschnitt.

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContactsEntity;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.RawContacts.Entity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
[...]
try{
            // add a row to the RawContacts table
     ContentValues values = new ContentValues();
     values.put(RawContacts.ACCOUNT_TYPE, "com.anddroid.contacts.sim");
     values.put(RawContacts.ACCOUNT_NAME, "SIM");
     Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);

            // get the ID of the newly-added line
     long rawContactId = ContentUris.parseId(rawContactUri);

            // add a "name" line to the Data table, linking it to the new RawContact
            // with the CONTACT_ID column
     values.clear();
     values.put(Data.RAW_CONTACT_ID, rawContactId);
     values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
     values.put(StructuredName.DISPLAY_NAME, "Name");
     cr.insert(Data.CONTENT_URI, values);
            // this insert succeeds

            // add a "phone" line to the Data table, linking it to the new RawContact
            // with the CONTACT_ID column
     values.clear();
     values.put(Data.CONTACT_ID, rawContactId);
     values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
     values.put(Phone.NUMBER, "+12345678901");
     values.put(Phone.TYPE, Phone.TYPE_MOBILE);
     cr.insert(Data.CONTENT_URI, values);
            // this insert fails with a NullPointerException
}
catch(Exception e){
    String xx=e.toString();
    System.out.println(xx);
}

Die Anwendung verfügt über die Berechtigungen android.permission.READ_CONTACTS und android.permission.WRITE_CONTACTS.

Das Telefon zeigt einen Kontakt mit dem Namen, aber ohne Telefon an (übrigens führt das Hinzufügen des Telefons zu diesem Kontakt unter Verwendung der normalen Benutzeroberfläche dazu, dass ein neuer Kontakt mit Name und Telefon hinzugefügt wird und der alte Kontakt nur mit Namen bleibt).

Keine Idee, warum die dritte Einfügung (die zweite in der Datentabelle) fehlschlägt, während die beiden vorherigen (1 in RawContacts und 1 in Data) erfolgreich sind?