我使用以下代码在Android通讯录中添加自定义Mimetype。此代码在下面的行中引发错误
getContentResolver()。insert(ContactsContract.Data.CONTENT_URI,values);
java.lang.NullPointerException:尝试在空对象引用上调用虚方法'long java.lang.Long.longValue()'
public static final String MIMETYPE_FORMALITY = "vnd.android.cursor.item/ABCAPPLICATION";
public MainActivity saveFormality() {
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.DATA1, this.getFormality() ? "1" : "0");
int mod = getContentResolver().update(
ContactsContract.Data.CONTENT_URI,
values,
ContactsContract.Data.CONTACT_ID + "=" + "2231" + " AND "
+ ContactsContract.Data.MIMETYPE + "= '"
+ MIMETYPE_FORMALITY + "'", null);
if (mod == 0) {
values.put(ContactsContract.Data.CONTACT_ID, Long.valueOf("2231"));
values.put(ContactsContract.Data.MIMETYPE, MIMETYPE_FORMALITY);
**getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);** // This line was throwing null pointer exception.
Log.v("mimeType", "Inserted");
}
return this;
}
我已经从Stackoverflow帖子中复制了这段代码但是它没有用。有人可以解释为什么它会抛出这个错误。
答案 0 :(得分:1)
不能保证这会解决您的问题,因为您尚未发布完整的堆栈跟踪,但通常情况下,您无法通过Data.CONTENT_URI
CONTACT_ID
向ContactsContract
插入行。 {1}} DB的工作方式如下:
Contacts
- 每个条目代表一个联系人,并将一个或多个RawContacts
RawContacts
- 每个条目代表有关某些SyncAdapter
(例如Whatsapp,Google,Facebook,Viber)同步的联系人的数据,此组合包含多个数据条目Data
- 有关联系人,电子邮件,电话等的实际数据,每一行都是属于单个RawContact
的单个数据因此,在添加数据行时,您必须通过Data.RAW_CONTACT_ID = ...
指定它将进入的确切RawContact._ID,无需指定CONTACT_ID
,因为RawContact
已属于某些Contact
这与对现有数据进行更新的方式相同。
作为旁注: