有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案