Java 为什么聊天列表没有出现?
它就像社交媒体应用程序,这个片段应该显示聊天列表,但它不是,下面是代码: DirectMessagesFragment:Java 为什么聊天列表没有出现?,java,android,firebase,firebase-realtime-database,android-recyclerview,Java,Android,Firebase,Firebase Realtime Database,Android Recyclerview,它就像社交媒体应用程序,这个片段应该显示聊天列表,但它不是,下面是代码: DirectMessagesFragment: public class DirectMessagesFragment extends Fragment{ FirebaseAuth firebaseAuth; FirebaseUser currentUser; AdapterChatlist adapterChatlist; DatabaseReference ref; RecyclerView recyclerViewC
public class DirectMessagesFragment extends Fragment{
FirebaseAuth firebaseAuth;
FirebaseUser currentUser;
AdapterChatlist adapterChatlist;
DatabaseReference ref;
RecyclerView recyclerViewChatter;
List<ModelChatter> chatterList ;
List<ModelChatlist> chatlistList ;
public DirectMessagesFragment(){}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
setHasOptionsMenu(true);
View view = inflater.inflate(R.layout.fragment_direct_messages, container, false);
firebaseAuth = FirebaseAuth.getInstance();
currentUser = FirebaseAuth.getInstance().getCurrentUser();
recyclerViewChatter = view.findViewById(R.id.chatter_recyclerview);
chatlistList = new ArrayList<>();
ref = FirebaseDatabase.getInstance().getReference("Chatlist").child(currentUser.getUid());
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
chatlistList.clear();
for (DataSnapshot ds:snapshot.getChildren()){
ModelChatlist chatlist = ds.getValue(ModelChatlist.class);
chatlistList.add(chatlist);}
loadChats();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {}
});
return view;
}
private void loadChats() {
chatterList = new ArrayList<>();
ref = FirebaseDatabase.getInstance().getReference("Users");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
chatterList.clear();
for (DataSnapshot ds:snapshot.getChildren()){
ModelChatter chatter = ds.getValue(ModelChatter.class);
for(ModelChatlist chatlist: chatlistList){
if(chatter.getUid() != null && chatter.getUid().equals(chatlist.getId())){
chatterList.add(chatter);
break;
}}
adapterChatlist = new AdapterChatlist(getContext(), chatterList);
recyclerViewChatter.setAdapter(adapterChatlist);
}}
@Override
public void onCancelled(@NonNull DatabaseError error) {}
});
}}
ModelChatlist仅包含id
ModelChatter包含名称、图像、uid
适配器目录:
public class AdapterChatlist extends RecyclerView.Adapter<AdapterChatlist.MyHolder>{
Context context;
List<ModelChatter> chattersList;
public AdapterChatlist(Context context, List<ModelChatter> chattersList) {
this.context = context;
this.chattersList = chattersList;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.row_dm, parent, false);
return new MyHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
String userImage = chattersList.get(position).getImage();
String userName = chattersList.get(position).getName();
String hisUid = chattersList.get(position).getUid();
holder.chatter_name.setText(userName);
try {
Picasso.with(context).load(userImage).placeholder(R.drawable.user).into(holder.chatter_img);
} catch (Exception e){
Picasso.with(context).load(R.drawable.user).into(holder.chatter_img);
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra("hisUid", hisUid);
context.startActivity(intent);
}
});}
@Override
public int getItemCount() {
return chattersList.size();}
class MyHolder extends RecyclerView.ViewHolder{
ImageView chatter_img;
TextView chatter_name;
public MyHolder(@NonNull View itemView) {
super(itemView);
chatter_img = itemView.findViewById(R.id.chatter_img);
chatter_name = itemView.findViewById(R.id.chatter_name);
}}}}
公共类AdapterChatlist扩展了RecyclerView.Adapter{
语境;
动产清单;
公共适配器目录(上下文,列表聊天列表){
this.context=上下文;
this.chattersList=chattersList;
}
@非空
@凌驾
public MyHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
视图=LayoutFlater.from(上下文)。充气(R.layout.row\u dm,父级,false);
返回新的MyHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MyHolder,int位置){
字符串userImage=chattersList.get(position.getImage();
字符串userName=chattersList.get(position.getName();
字符串hisUid=chattersList.get(position.getUid();
holder.chatter_name.setText(用户名);
试一试{
毕加索.with(context).load(userImage).placeholder(R.drawable.user).into(holder.chatter\u img);
}捕获(例外e){
毕加索.with(context).load(R.drawable.user).into(holder.chatter\u img);
}
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文,ChatActivity.class);
intent.putExtra(“hisUid”,hisUid);
背景。开始触觉(意图);
}
});}
@凌驾
public int getItemCount(){
返回chattersList.size();}
类MyHolder扩展了RecyclerView.ViewHolder{
ImageView chatter_img;
TextView chatter_名称;
公共MyHolder(@NonNull View itemView){
超级(项目视图);
chatter\u img=itemView.findviewbyd(R.id.chatter\u img);
chatter\u name=itemView.findviewbyd(R.id.chatter\u name);
}}}}
片段\直接\消息布局包含recyclerview,行\ dm包含cardview
任何帮助都将不胜感激。将聊天列表传递到您的方法中
for (DataSnapshot ds:snapshot.getChildren()){
ModelChatlist chatlist = ds.getValue(ModelChatlist.class);
chatlistList.add(chatlist);
}
loadChats(chatlistList);
private void loadChats(List<ModelChatlist> chatlist) {
//your code
}
(DataSnapshot ds:snapshot.getChildren()的{
ModelChatlist chatlist=ds.getValue(ModelChatlist.class);
添加(chatlist);
}
加载聊天(聊天列表);
私有void加载聊天(列表聊天列表){
//你的代码
}
尝试添加过滤器(如记录接收到的数据)以检查实际问题仍然存在的位置。浏览这么多代码是很困难的。如果遇到问题,最好在发布问题时创建一个链接。您为此问题发布了近400(四百)行代码。对于人们来说,在线解析和调试是非常困难的。请编辑您的问题并隔离问题,这样可以增加您获得帮助的机会。没有任何更改,感谢您的尝试。那么您是否在从快照添加值后检查聊天列表大小?外出loop@SalmaSaloomInstead在使用ds.getValue时,ds.toObject(yourModelClass)toObject是未定义的(红色)Oops!查看here()从datasnapshot获取值。@SalmaSaloom
for (DataSnapshot ds:snapshot.getChildren()){
ModelChatlist chatlist = ds.getValue(ModelChatlist.class);
chatlistList.add(chatlist);
}
loadChats(chatlistList);
private void loadChats(List<ModelChatlist> chatlist) {
//your code
}