Android - 如何检查您的联系人是否已在您的应用程序上注册?

Har*_*hra 7 android contacts android-studio

我正在尝试创建一个 ChatApp。所以,我想知道在我的联系人列表中是否有人在我的应用程序中注册过。

在此处输入图片说明

如上图所示,有 3 个键。El7SIqgHmWTsZCl6gVaXidKGsok1这是我和其他人 2 是我的朋友,我也有他们phoneNumber。所以,我想在我的应用程序中将这两个显示为我的朋友。但它没有显示任何用户。

这是我尝试过的代码。

public class UsersFragment extends Fragment {

    RecyclerView recyclerView;
    ContactsAdapter adapter;
    List<Users> contactsList, userList;
    DatabaseReference reference;
    String userId;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_users, container, false);

        recyclerView = view.findViewById(R.id.userRecyclerView);
        recyclerView.setHasFixedSize(false);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

        reference = FirebaseDatabase.getInstance().getReference().child("Users");
        contactsList = new ArrayList<>();
        userList = new ArrayList<>();

        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        userId = user.getUid();

        return view;
    }

    private void getContactList() {
        Cursor cursor = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null, null, null,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        ;
        while (cursor.moveToNext()) {
            String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

            Users contacts = new Users(name, phone, "", "");
            contactsList.add(contacts);
            if (contactsList.contains(contacts)) {
                cursor.moveToNext();
            }
            getActualUsers(contacts);
        }

    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        getContactList();
    }

    private void getActualUsers(final Users contacts) {
        Query query = reference.orderByChild("number").equalTo(contacts.getPhoneNumber());
        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    Users users = dataSnapshot.getValue(Users.class);
                    userList.add(users);
                }
                Log.d("contact", String.valueOf(userList.size()));
                adapter = new ContactsAdapter(getContext(), userList);
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });
    }

}
Run Code Online (Sandbox Code Playgroud)

我的模型类

公共类用户{

String username, phoneNumber, userId, profilephotoURL;

public  Users(){}
public Users(String username, String phoneNumber, String userId, String profilephotoURL) {
    this.username = username;
    this.phoneNumber = phoneNumber;
    this.userId = userId;
    this.profilephotoURL = profilephotoURL;
}

public String getUsername() {
    return username;
}

public String getPhoneNumber() {
    return phoneNumber;
}

public String getUserId() {
    return userId;
}

public String getProfilephotoURL() {
    return profilephotoURL;
}
Run Code Online (Sandbox Code Playgroud)

}

我的适配器类

public class UsersAdapter extends RecyclerView.Adapter<UsersAdapter.ViewHolder> {
    Context mContext;
    List<Users> mList;

    public UsersAdapter(Context mContext, List<Users> mList) {
        this.mContext = mContext;
        this.mList = mList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.display_contacts, null);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        final Users users = mList.get(position);
        holder.name.setText(users.getUsername());
        holder.number.setText(users.getPhoneNumber());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext, ChatActivity.class);
                intent.putExtra("name", users.getUsername());
                intent.putExtra("userid", users.getPhoneNumber());
                intent.putExtra("id", users.getUserId());
                mContext.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView name, number;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.contactName);
            number = itemView.findViewById(R.id.contactNumber);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助或建议?

HAR*_*HRA 2

所以,我能够找出问题所在,现在我有了解决方案。所以,我将其发布,以防有​​人需要。

这是用户片段的整个更改代码

public class UsersFragment extends Fragment {

    RecyclerView recyclerView;
    UsersAdapter adapter;

    List<String> contactsList;
    DatabaseReference reference;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_users, container, false);

        recyclerView = view.findViewById(R.id.userRecyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(adapter);

        contactsList = new ArrayList<>();

        return view;
    }


    private void getContactList() {
        Cursor cursor = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                null, null, null,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
        while (cursor.moveToNext()) {
            String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            if (contactsList.contains(phone)) {
                cursor.moveToNext();
            } else {
                contactsList.add(phone);

            }
        }

        getActualUser();
        Log.d("contact: ", String.valueOf(contactsList.size()));

    }

    private void getActualUser() {
        reference = FirebaseDatabase.getInstance().getReference().child("Users");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                List<Users> actualuserList = new ArrayList<>();
                actualuserList.clear();
                if (snapshot.exists()) {
                    for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                        Users user = dataSnapshot.getValue(Users.class);
                        for (String number : contactsList){
                            if (user.getPhoneNumber().equals(number)){
                                actualuserList.add(user);
                            }
                        }
                    }
                    Log.d("actual: ", String.valueOf(actualuserList.size()));
                    adapter = new UsersAdapter(getContext(), actualuserList);
                    adapter.notifyDataSetChanged();
                    recyclerView.setAdapter(adapter);

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        getContactList();

    }
}
Run Code Online (Sandbox Code Playgroud)