Die vollständige Ausnahme, die ich bekommen ist:Wie finde ich heraus, welches Feld NullPointerException verursacht, wenn ein benutzerdefiniertes Feld in die Kontakte-Datentabelle eingefügt wird?
07-16 19:19:17.244: ERROR/DatabaseUtils(151): java.lang.NullPointerException
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.ContactsProvider2.insertData(ContactsProvider2.java:3069)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.ContactsProvider2.insertInTransaction(ContactsProvider2.java:2930)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.CContactsProvider2.insertInTransaction(CContactsProvider2.java:156)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.HtcContactsProvider2.insertInTransaction(HtcContactsProvider2.java:1281)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:90)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:2737)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at android.content.ContentProvider$Transport.insert(ContentProvider.java:150)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:170)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at android.os.Binder.execTransact(Binder.java:287)
07-16 19:19:17.244: ERROR/DatabaseUtils(151): at dalvik.system.NativeStart.run(Native Method)
Der Code, den ich verwenden:
public void saveFormality() {
ContentValues values = new ContentValues();
values.put(Data.DATA1, this.getFormality() ? "1" : "0");
saveDataWithMimeType(clsContacts.MIMETYPE_FORMALITY, values, this.getId());
}
private void saveDataWithMimeType(String mimetype, ContentValues values, String contactid) {
try {
int mod = ctx.getContentResolver().update(
Data.CONTENT_URI,
values,
ContactsContract.Data.RAW_CONTACT_ID + "=" + contactid + " AND " + ContactsContract.Data.MIMETYPE + "= '"
+ mimetype + "'", null);
if (mod == 0) {
values.put(Data.RAW_CONTACT_ID, contactid);
values.put(Data.MIMETYPE, mimetype);
// this is where exception occurs
Uri u=ctx.getContentResolver().insert(Data.CONTENT_URI, values);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Dies nur am Telefon geschieht, und nicht in dem Emulator. Alle Felder wurden überprüft und keine von ihnen sind Nullen. Was könnte der Grund sein?
Auf welcher API-Ebene geschieht dies? – ognian
API-Ebene ist 2.1 – Pentium10
Dies muss ein gerätspezifischer Fehler sein, da in der ursprünglichen Android-Quelle ContactsProvider2.java3069 nicht die Methode insertData() ist. – ognian