【发布时间】:2018-06-24 00:31:57
【问题描述】:
我正在使用支持 CursorLoader 来加载联系人。
当使用大于 21 的 API 时,我调用
loader.setUri(ContactsContract.Data.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.Data.EXTRA_ADDRESS_BOOK_INDEX, "true").build());
意思是我会得到联系人首字母的索引。
加载后,我收到此崩溃:
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)
还有
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)
有人可以帮忙吗?
更新
使用 ContractsData.CommonDataKinds.Phone 视图时也会发生同样的情况,即使该列已公开
【问题讨论】:
标签: android android-contentprovider android-contacts contactscontract android-cursorloader