public void click(View view){ Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); Uri dataUri = Uri.parse("content://com.android.contacts/data"); ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(uri, null, null, null, null); StringBuilder sb = new StringBuilder(); while(cursor.moveToNext()){ String contact_id = cursor.getString(cursor.getColumnIndex("contact_id")); // Log.i(TAG,"contact_id-----------------" + contact_id); Cursor dataCursor = resolver.query(dataUri, null, "contact_id=?", new String[]{contact_id} , null); String name = ""; String number = ""; while(dataCursor.moveToNext()){ int mimetypeId = dataCursor.getInt(dataCursor.getColumnIndex("mimetype_id")); //String mimetypeId = dataCursor.getString(dataCursor.getColumnIndex("mimetype")); Log.i(TAG,"mimetype" + mimetypeId); String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1")); if( mimetypeId == 7){ name = data1; }else if(mimetypeId == 5){ number = data1 ; } } sb.append("name:" + name + "number:" + number); dataCursor.close(); } Log.i(TAG, sb.toString()); cursor.close(); }
为什么
int mimetypeId = dataCursor.getInt(dataCursor.getColumnIndex("mimetype_id"));
这句话报Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.一般出这个错误,都是因为表中没有这个字段。而我前面dataUri查询的是data表,实际上查询的是view_data视图,但是不管data表还是view_data视图,都有mimetype_id,怎么会查不出呢?而mimetype可以查出来,data表中没有这个字段,view_data视图中有这个,这个可以查出来
还有个问题,就是用读出来的联系人会和实际的数量不一样呢??
这个是什么。######读取手机联系人的信息######你查的时候就没加
mimetype_id字段,当然查不出来######1.mimetype_id虽然在data表和view_data视图中有,但在允许的返回列中没有,因此查询不到。
2.你读取的是raw_contacts表,实际显示的是contacts,一个contacts是由多个raw_contacts聚合而来,因此数量不同。
######楼主你最后怎么解决的版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。