RecyclerView中的java重复联系人
我正在使用下面的代码从设备中填充联系人列表,看起来一切正常,但联系人显示两次甚至两次以上,请根据我的代码提供帮助。我尝试了很多解决方案,但是我必须获取联系人列表的代码使用了Asynctasks和一些我不知道的其他属性,因此我需要一个基于下面代码的解决方案 提前感谢:)
下面是我的活动课
public class Contacts extends AppCompatActivity {
ArrayList<ContactsPoJo> selectUsers;
ArrayList<Conversation> conversations;
ContactsPoJo myPOJO;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
RecyclerAdapter adapter;
Context mContext;
ProgressBar progressBar;
ConverstaionItemAdapter converstaionItemAdapter;
ProgressDialog dialog;
String[] mProjection = new String[] {ContactsContract.Contacts._ID,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER,
ContactsContract.Contacts.PHOTO_URI,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
recyclerView = (RecyclerView) findViewById(R.id.contacts_listLog);
progressBar = (ProgressBar) findViewById(R.id.progressBarLog);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext, RecyclerView.VERTICAL, false));
selectUsers = new ArrayList<ContactsPoJo>();
showContacts();
}
private void showContacts() {
// Check the SDK version and whether the permission is already granted or not.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
PERMISSIONS_REQUEST_READ_CONTACTS);
//After this point you wait for callback in onRequestPermissionsResult(int, String[], int[])
overriden method
} else {
// Android version is lesser than 6.0 or the permission is already granted.
Contacts.LoadContact loadContact = new LoadContact();
loadContact.execute();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission is granted
showContacts();
} else {
Toast.makeText(this, "Until you grant the permission, we canot display the names",
Toast.LENGTH_SHORT).show();
}
}
}
class LoadContact extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... voids) {
// Get Contact list from Phone
Cursor phones = getApplicationContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, mProjection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
while (phones.moveToNext()) {
String id = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id));
Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
ContactsPoJo selectUser = new ContactsPoJo();
selectUser.setName(name);
selectUser.setPhoto(photoUri);
selectUser.setPhone(phoneNumber);
selectUsers.add(selectUser);
} phones.close();
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// sortContacts();
int count=selectUsers.size();
ArrayList<ContactsPoJo> removed=new ArrayList<>();
ArrayList<ContactsPoJo> contacts=new ArrayList<>();
for(int i=0;i<selectUsers.size();i++){
ContactsPoJo inviteFriendsProjo = selectUsers.get(i);
if(inviteFriendsProjo.getName().matches("\\d+(?:\\.\\d+)?")||inviteFriendsProjo.getName().trim().length()==0){
removed.add(inviteFriendsProjo);
}else{
contacts.add(inviteFriendsProjo);
}
}
contacts.addAll(removed);
selectUsers=contacts;
adapter = new RecyclerAdapter(inflater, selectUsers, getApplicationContext(), onClickListener );
recyclerView.setLayoutManager(new LinearLayoutManager(mContext, RecyclerView.VERTICAL, false));
recyclerView.setAdapter(adapter);
progressBar.setVisibility(View.GONE);
// selectUsers.add(0, );
}
}
}
共 (0) 个答案