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)
任何帮助或建议?
所以,我能够找出问题所在,现在我有了解决方案。所以,我将其发布,以防有人需要。
这是用户片段的整个更改代码
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)
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |