Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么聊天列表没有出现?_Java_Android_Firebase_Firebase Realtime Database_Android Recyclerview - Fatal编程技术网

Java 为什么聊天列表没有出现?

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

它就像社交媒体应用程序,这个片段应该显示聊天列表,但它不是,下面是代码:

DirectMessagesFragment:

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
}