I am using a support CursorLoader to load Contacts.
When using an API larger than 21, I call
loader.setUri(ContactsContract.Data.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.Data.EXTRA_ADDRESS_BOOK_INDEX, "true").build());
Meaning I will get an index of the contacts' first letters.
Upon loading, I receive this crash:
Writing exception to parcel
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] android.os.BaseBundle.getStringArray(java.lang.String)' on a null object reference
at com.android.providers.contacts.FastScrollingIndexCache.put(FastScrollingIndexCache.java:237)
at com.android.providers.contacts.ContactsProvider2.bundleFastScrollingIndexExtras(ContactsProvider2.java:8320)
at com.android.providers.contacts.ContactsProvider2.queryLocal(ContactsProvider2.java:7803)
at com.android.providers.contacts.ContactsProvider2.queryDirectoryIfNecessary(ContactsProvider2.java:6083)
at com.android.providers.contacts.ContactsProvider2.query(ContactsProvider2.java:6065)
at com.android.providers.contacts.SemcContactsProvider2.query(SemcContactsProvider2.java:550)
at android.content.ContentProvider$Transport.query(ContentProvider.java:247)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:112)
at android.os.Binder.execTransact(Binder.java:570)
As well as
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:161)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String[] android.os.BaseBundle.getStringArray(java.lang.String)' on a null object reference
at android.os.Parcel.readException(Parcel.java:1689)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:188)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:421)
at android.content.ContentResolver.query(ContentResolver.java:537)
at android.support.v4.content.ContentResolverCompat.query(ContentResolverCompat.java:80)
at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:61)
at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:39)
at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:306)
at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:59)
at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:47)
at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:138)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
Can anyone help out?
UPDATE
The same occurs when using the ContractsData.CommonDataKinds.Phone view, even although the column is exposed
From the docs example code it looks like they're appending this parameter to Contacts.CONTENT_URI
not Data.CONTENT_URI
like you do.
Uri uri = Contacts.CONTENT_URI.buildUpon()
.appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true")
.build();
You said you're using CursorLoader
to load Contacts
, then you might want to query on the Contacts.CONTENT_URI
table for that, the Data.CONTENT_URI
is meant for getting specific details (emails, phones, etc.) on contacts, not basic info like name or pic.