我正在使用Cloud Firestore作为数据库,将所有用户保存为“users”集合中的文档我想将“用户”集合中的所有用户显示到
RecyclerView
但当前正在使用应用程序的用户除外。我在网上搜了很多东西想找到解决办法,但都找不到所以请大家帮我,提前谢谢。我是初学者,真的需要你的帮助再次感谢。
这是我的Firestore适配器:
mQuery = FirebaseFirestore.getInstance().collection("users");
FirestoreRecyclerOptions<NearbyUserRecyclerModel> options = new FirestoreRecyclerOptions.Builder<NearbyUserRecyclerModel>()
.setQuery(mQuery,NearbyUserRecyclerModel.class)
.setLifecycleOwner(getActivity())
.build();
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<NearbyUserRecyclerModel,NearbyProfilesViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final NearbyProfilesViewHolder holder, int position, @NonNull final NearbyUserRecyclerModel model) {
holder.itemBuddyState.setText("0");
Glide.with(getActivity()).load(model.getThumb_pictures()).into(holder.itemImage);
holder.itemDisplayName.setText(model.getFirst_name());
holder.itemOnline.setVisibility(View.VISIBLE);
DocumentSnapshot snapshot = getSnapshots().getSnapshot(position);
if (snapshot.contains("online")){
Boolean onlineState = snapshot.getBoolean("online");
if (onlineState == true){
holder.itemOnline.setVisibility(View.VISIBLE);
}
else {
holder.itemOnline.setVisibility(View.INVISIBLE);
}
}
final String user_id = snapshot.getId();
mChatRequestCollection.document(current_user_id).collection("request_received")
.document(user_id).get().addOnCompleteListener(getActivity(),
new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()){
DocumentSnapshot document = task.getResult();
if (document.contains("received_time")){
holder.itemBuddyState.setText("3");
}else {
Log.d("REQUEST RECEIVED", "onComplete: received field doest exist, "+task.getException());
}
}else {
Log.d("REQUEST RECEIVED", "onComplete: Document doesn't exist, "+ task.getException());
}
}
});
mChatRequestCollection.document(current_user_id).collection("request_sent")
.document(user_id).get().addOnCompleteListener(getActivity(),
new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()){
DocumentSnapshot document = task.getResult();
if (document.contains("sent_time")){
holder.itemBuddyState.setText("2");
}else {
Log.d("REQUEST SENT", "onComplete: sent field doesn't exist, "+ task.getException());
}
}else {
Log.d("REQUEST SENT", "onComplete: Document doesn't exist,");
}
}
});
mChatHolderCollection.document(current_user_id+"/user_chats/"+user_id)
.get().addOnCompleteListener(getActivity(),
new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()){
DocumentSnapshot document = task.getResult();
if (document.contains("timestamp")){
holder.itemBuddyState.setText("1");
}else {
Log.d("CHAT_HOLDERDOC", "onComplete: timeStamp field doesn't exist, "+task.getException());
}
}else {
Log.d("CHAT_HOLDERDOC", "onComplete: chat buddy doesn't exist, "+task.getException());
}
}
});
holder.itemImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userPopupDialog(model, user_id);
// popupIntent(user_id);
}
});
holder.itemButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
String message = holder.itemEditText.getText().toString();
if (holder.itemBuddyState.getText().equals("0")){
if (!TextUtils.isEmpty(message)) {
WriteBatch request_batch = mRootStore.batch();
Map<String, Object> sentMap = new HashMap<>();
sentMap.put("sent_time", FieldValue.serverTimestamp());
sentMap.put("message", message);
Map<String, Object> receivedMap = new HashMap<>();
receivedMap.put("received_time", FieldValue.serverTimestamp());
receivedMap.put("message", message);
Map<String, Object> notificationMap = new HashMap<>();
notificationMap.put("from", current_user_id);
notificationMap.put("type", "request");
DocumentReference sentRef = mRootStore.collection("chat_requests").document(current_user_id + "/request_sent/" + user_id);
request_batch.set(sentRef, sentMap, SetOptions.merge());
DocumentReference receivedRef = mRootStore.collection("chat_requests").document(user_id + "/request_received/" + current_user_id);
request_batch.set(receivedRef, receivedMap, SetOptions.merge());
DocumentReference notificationRef = mRootStore.collection("users/" + user_id + "/notifications").document();
request_batch.set(notificationRef, notificationMap, SetOptions.merge());
request_batch.commit().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
//------------Request Sent------------//
holder.itemEditText.setText("");
holder.itemBuddyState.setText("2");
Log.d("REQUEST_LOG", "onComplete: Request sent Successfully");
Log.d("REQUEST_LOG", "onComplete: Notification sent Successfully");
Snackbar.make(v, "Request sent Successfully", Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(v, "Failed Sending Request", Snackbar.LENGTH_LONG).show();
Log.d("REQUEST_LOG", "onComplete: Failed sending request" + task.getException());
}
}
});
}
}
if (holder.itemBuddyState.getText().equals("3")){
holder.itemEditText.setText("");
Snackbar.make(v, "Request already received by user", Snackbar.LENGTH_LONG).show();
}
if (holder.itemBuddyState.getText().equals("2")){
holder.itemEditText.setText("");
Snackbar.make(v, "Request already sent", Snackbar.LENGTH_LONG).show();
}
if (holder.itemBuddyState.getText().equals("1")){
holder.itemEditText.setText("");
Snackbar.make(v,"User already chat buddy", Snackbar.LENGTH_LONG).show();
}
}
});
}
@NonNull
@Override
public NearbyProfilesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.nearby_profiles_recycler_items, parent, false);
final AppCompatImageButton button_send = view.findViewById(R.id.itemSendButton_id);
final AppCompatEditText editText_message = view.findViewById(R.id.itemEditText_id);
Drawable drawable = getResources().getDrawable(R.drawable.ic_send_new);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, getResources().getColor(R.color.colorTabUnselected));
button_send.setImageDrawable(drawable);
button_send.setEnabled(false);
editText_message.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String message = editText_message.getText().toString();
if (TextUtils.isEmpty(message)){
Drawable drawable = getResources().getDrawable(R.drawable.ic_send_new);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, getResources().getColor(R.color.colorTabUnselected));
button_send.setImageDrawable(drawable);
button_send.setEnabled(false);
}
else {
Drawable drawable = getResources().getDrawable(R.drawable.ic_send_new);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, getResources().getColor(R.color.colorTabSelected));
button_send.setImageDrawable(drawable);
button_send.setEnabled(true);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
return new NearbyProfilesViewHolder(view);
}
};
nearbyRecycler.setAdapter(adapter);