【发布时间】:2020-09-08 00:16:47
【问题描述】:
我正在尝试查看我手机上的所有联系人并已在应用程序上注册。我可以看到注册的联系人,但正如您所见,我在数据库中有一个用户名 John 的条目,而在 Android 应用程序中,它显示了多个。我只想展示一次。不知道是什么原因,有大神帮忙吗? 这是代码
public class UsersFragment extends Fragment {
private RecyclerView recyclerView;
private RecyclerView.Adapter mUserlist;
ArrayList<ProfileInfo> list, userList;
DatabaseReference db;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_users, container, false);
db = FirebaseDatabase.getInstance().getReference().child("UserInfo");
recyclerView = view.findViewById(R.id.UserRecyclerView);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
list = new ArrayList<>();
userList = new ArrayList<>();
mUserlist = new UsersAdapter(userList);
recyclerView.setAdapter(mUserlist);
displayContactList();
return view;
}
private void displayContactList() {
Cursor numberList = getActivity().getApplicationContext().getContentResolver().query
(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, null, null, null);
assert numberList != null;
while (numberList.moveToNext()) {
String name = numberList.getString(numberList.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phoneNumber = numberList.getString(numberList.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
ProfileInfo info = new ProfileInfo(name, phoneNumber);
list.add(info);
showAppUsers(info);
}
}
private void showAppUsers(ProfileInfo info){
Query query = db.orderByChild("phoneNumber").equalTo(info.getPhoneNumber());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() ){
String phone ="",
name="";
for (DataSnapshot child : dataSnapshot.getChildren()){
if (child.child("phoneNumber").getValue() != null)
name = Objects.requireNonNull(child.child("userName").getValue()).toString();
if (child.child("userName").getValue() != null)
phone = Objects.requireNonNull(child.child("phoneNumber").getValue()).toString();
ProfileInfo info = new ProfileInfo(name, phone);
userList.add(info);
mUserlist.notifyDataSetChanged();
return;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
【问题讨论】:
标签: java android firebase firebase-realtime-database duplicates