我正在使用此代码从手机获取所有联系人,但是当我使用它时会导致黑屏。
线程:
Thread getAllContacts = new Thread () {
@Override
public void run () {
runOnUiThread ( new Runnable () {
@Override
public void run () {
getContacts ( getContentResolver () );
}
} );
}
};
getAllContacts.start ();
以下代码是我的getContacts
方法,我无法更新它以快速获取联系人:
public void getContacts(ContentResolver cr){
Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone._ID));
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Bitmap photo = G.getContactPhoto ( phoneNumber, getContentResolver () );
ContactListStructure item = new ContactListStructure();
String phone_number = phoneNumber.replaceAll("\\s+","").trim ().replace("+98", "0");
int check_mobile = phone_number.indexOf ( "09" );
if( check_mobile != -1){
item.id = Long.parseLong ( id );
item.name = name;
item.mobile = phone_number;
item.photo = photo;
item.checked = false;
G.contact_item.add ( item );
//personlst.add( new Person (item.name, item.mobile) );
}
}
phones.close ();
}
答案 0 :(得分:1)
好的,我看到了你的问题。 您正在UI线程上运行它。 创建一个AsyncTask并在那里运行它。当tash完成时,使用runOnUIThread方法显示联系人。