I am trying to create a ChatApp. So, I want to find out if in my contact list anyone has registered in my app or not.
As in the above image, there are 3 keys. El7SIqgHmWTsZCl6gVaXidKGsok1 This is me and others 2 are my friends and I have their phoneNumber also. So, I wanna display these 2 as my friends in my app. But It doesn't show any users.
Here is the Code that I Have tried.
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) {
}
});
}
}
My Model Class
public class Users {
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;
}
}
My Adapter Class
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);
}
}
}
Any Help or Suggestions?
