测试了半天,也没找到原因,报错日志如下:希望大家能不吝赐教~~~06-10 08:34:05.885: ERROR/DatabaseUtils(3133): Writing exception to parcel
06-10 08:34:05.885: ERROR/DatabaseUtils(3133): java.lang.NullPointerException
06-10 08:34:05.885: ERROR/DatabaseUtils(3133):     at android.database.BulkCursorToCursorAdaptor.findRowIdColumnIndex(BulkCursorToCursorAdaptor.java:70)
06-10 08:34:05.885: ERROR/DatabaseUtils(3133):     at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:119)
06-10 08:34:05.885: ERROR/DatabaseUtils(3133):     at android.os.Binder.execTransact(Binder.java:320)
06-10 08:34:05.885: ERROR/DatabaseUtils(3133):     at dalvik.system.NativeStart.run(Native Method)
06-10 08:34:05.925: ERROR/DatabaseUtils(3133): Writing exception to parcel
06-10 08:34:05.925: ERROR/DatabaseUtils(3133): java.lang.NullPointerException
06-10 08:34:05.925: ERROR/DatabaseUtils(3133):     at android.database.BulkCursorNative.onTransact(BulkCursorNative.java:89)
06-10 08:34:05.925: ERROR/DatabaseUtils(3133):     at android.os.Binder.execTransact(Binder.java:320)
06-10 08:34:05.925: ERROR/DatabaseUtils(3133):     at dalvik.system.NativeStart.run(Native Method)
06-10 08:34:05.945: DEBUG/AndroidRuntime(3174): Shutting down VM
06-10 08:34:05.955: WARN/dalvikvm(3174): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-10 08:34:06.015: ERROR/AndroidRuntime(3174): FATAL EXCEPTION: main
06-10 08:34:06.015: ERROR/AndroidRuntime(3174): java.lang.NegativeArraySizeException
06-10 08:34:06.015: ERROR/AndroidRuntime(3174):     at android.database.BulkCursorProxy.getColumnNames(BulkCursorNative.java:281)
06-10 08:34:06.015: ERROR/AndroidRuntime(3174):     at android.database.BulkCursorToCursorAdaptor.getColumnNames(BulkCursorToCursorAdaptor.java:213)
06-10 08:34:06.015: ERROR/AndroidRuntime(3174):     at android.database.AbstractCursor.getColumnIndex(AbstractCursor.java:295)
06-10 08:34:06.015: ERROR/AndroidRuntime(3174):     at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:312)
06-10 08:34:06.015: ERROR/AndroidRuntime(3174):     at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99)
通讯录中的联系人信息能获得。主要功能实现代码如下:public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// Figure out the uri and return error if not matching
int type = URI_MATCHER.match(uri);
if (type == UriMatcher.NO_MATCH) {
return sErrorCursor; }
Log.i("ss", "query called");
try {
MatrixCursor mc = loadNewData(this);
mc.setNotificationUri(getContext().getContentResolver(),
ContactsContract.Contacts.CONTENT_URI);
MyCursor wmc = new MyCursor(mc, this);
return wmc;
} catch (Throwable e) {
return sErrorCursor;
}
} public static MatrixCursor loadNewData(ContentProvider cp) {
MatrixCursor mc = new MatrixCursor(CURSOR_COLUMNS);
Cursor allContacts = null;
try {
allContacts = cp.getContext().getContentResolver()
.query(ContactsContract.Contacts.CONTENT_URI, CONTACTS_COLUMN_NAMES, null, // row
// filter
null, ContactsContract.Contacts.DISPLAY_NAME); // order by
allContacts.moveToFirst();
Log.d("contactNuM", "contact numbers--------------"+allContacts.getCount());
while (!allContacts.isAfterLast()) {
//String timesContacted = "Times contacted: "+ allContacts.getInt(2);
long id=allContacts.getLong(0);
String des=allContacts.getString(1);

Object[] rowObject = new Object[] {
id, // id
des, // name

};
Log.d("contacID", "contact id is --------------"+id);
Log.d("contactName", "contact name is --------------"+des);
mc.addRow(rowObject);
allContacts.moveToNext();
}

return mc;
} finally {
allContacts.close();
}
}

解决方案 »

  1.   

    自己顶一下,是在2.3的samples中的例子
      

  2.   

    好的,一起研究下,我觉得问题可能是MartixCursor或是通讯录显示的数据结构的问题
      

  3.   

    报空指针异常,试试看是不是这个地方需要加保护:
    if(null != allContacts) {
        allContacts.moveToFirst();
        Log.d("contactNuM", "contact numbers--------------"+allContacts.getCount());    while (!allContacts.isAfterLast()) {
            long id=allContacts.getLong(0);
            String des=allContacts.getString(1);
            Log.d("contacID", "contact id is --------------"+id);
            Log.d("contactName", "contact name is --------------"+des);        Object[] rowObject = new Object[] {id, des, ;
            mc.addRow(rowObject);        allContacts.moveToNext();
         }
    }
      

  4.   

    看错误日志,在3174行有个致命的exception,获取数据库字段的时候传人的参数应该有问题。你可以debug一下。