Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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 Android聊天在DataSnapshot.getValue()上崩溃_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Android聊天在DataSnapshot.getValue()上崩溃

Java Android聊天在DataSnapshot.getValue()上崩溃,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,这是我的第一个Firebase应用程序,我正在尝试检索聊天信息列表。循环停止了,我不知道为什么以及如何修复它 错误: com.google.firebase.database.DatabaseException:无法转换对象 从java.lang.String类型到com.apps.amchat.Model.Chat类型 错误就在这里 Chat Chat=snapshot.getValue(Chat.class) 误差函数 public void onDataChange(@NonNul

这是我的第一个Firebase应用程序,我正在尝试检索聊天信息列表。循环停止了,我不知道为什么以及如何修复它

错误:

com.google.firebase.database.DatabaseException:无法转换对象 从java.lang.String类型到com.apps.amchat.Model.Chat类型

错误就在这里

Chat Chat=snapshot.getValue(Chat.class)

  • 误差函数

        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            mchat.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                Chat chat = snapshot.getValue(Chat.class);
                if(chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
                        chat.getReceiver().equals(userid) && chat.getSender().equals(myid)){
                    mchat.add(chat);
                }
    
                messageAdapter = new MessageAdapter(MessageActivity.this, mchat, imageurl);
                recyclerView.setAdapter(messageAdapter);
    
            }
    
        }
    
  • 聊天课

    public class Chat {
    
    private String sender;
    private String receiver;
    private String message;
    
    public Chat(String sender, String receiver, String message) {
        this.sender = sender;
        this.receiver = receiver;
        this.message = message;
    }
    
    public Chat() {
    
    }
    
    public String getSender() {
        return sender;
    }
    
    public void setSender(String sender) {
        this.sender = sender;
    }
    
    public String getReceiver() {
        return receiver;
    }
    
    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }
    
    public String getMessage() {
        return message;
    }
    
    public void setMessage(String message) {
        this.message = message;
    }
    }
    
  • 适配器

    public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
    
    public static final int MSG_TYPE_LEFT = 0;
    public static final int MSG_TYPE_RIGHT = 1;
    
    private Context mContext;
    private List<Chat> mChat;
    private String imageurl;
    
    FirebaseUser fuser;
    
    public MessageAdapter(Context mContext, List<Chat> mChat, String imageurl){
        this.mChat = mChat;
        this.mContext = mContext;
        this.imageurl = imageurl;
    }
    
    @NonNull
    @Override
    public MessageAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == MSG_TYPE_RIGHT) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_right, parent, false);
            return new MessageAdapter.ViewHolder(view);
        } else {
            View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_left, parent, false);
            return new MessageAdapter.ViewHolder(view);
        }
    }
    
    @Override
    public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder holder, int position) {
    
        Chat chat = mChat.get(position);
    
        holder.show_message.setText(chat.getMessage());
    
        if(imageurl.equals("default")){
            holder.profile_image.setImageResource(R.mipmap.ic_launcher);
        } else {
            Glide.with(mContext).load(imageurl).into(holder.profile_image);
        }
    
    }
    
    @Override
    public int getItemCount() {
        return mChat.size();
    }
    
    public class ViewHolder extends RecyclerView.ViewHolder{
    
        public TextView show_message;
        public ImageView profile_image;
    
        public ViewHolder(View itemView){
            super(itemView);
    
            show_message = itemView.findViewById(R.id.show_message);
            profile_image = itemView.findViewById(R.id.profile_image);
        }
    }
    
    @Override
    public int getItemViewType(int position) {
        fuser = FirebaseAuth.getInstance().getCurrentUser();
        if(mChat.get(position).getSender().equals(fuser.getUid())){
            return MSG_TYPE_RIGHT;
        } else {
            return MSG_TYPE_LEFT;
        }
    }
    }
    
    公共类MessageAdapter扩展了RecyclerView.Adapter{ 公共静态最终int MSG_TYPE_LEFT=0; 公共静态最终int MSG_TYPE_RIGHT=1; 私有上下文; 私人名单mChat; 私有字符串imageurl; FirebaseUser定影器; public MessageAdapter(上下文mContext、列表mChat、字符串imageurl){ this.mChat=mChat; this.mContext=mContext; this.imageurl=imageurl; } @非空 @凌驾 public MessageAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){ if(viewType==MSG\u TYPE\u RIGHT){ 查看视图=LayoutFlater.from(mContext).充气(R.layout.chat\u item\u right,parent,false); 返回新的MessageAdapter.ViewHolder(视图); }否则{ 查看视图=LayoutFlater.from(mContext).充气(R.layout.chat\u item\u left,parent,false); 返回新的MessageAdapter.ViewHolder(视图); } } @凌驾 public void onBindViewHolder(@NonNull MessageAdapter.ViewHolder,int位置){ Chat Chat=mChat.get(位置); show_message.setText(chat.getMessage()); if(imageurl.equals(“默认”)){ holder.profile\u image.setImageResource(R.mipmap.ic\u启动器); }否则{ 使用(mContext).load(imageurl).into(holder.profile\u image); } } @凌驾 public int getItemCount(){ 返回mChat.size(); } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 公共文本视图显示消息; 公共图像查看剖面图; 公共视图持有者(视图项视图){ 超级(项目视图); show_message=itemView.findviewbyd(R.id.show_message); profile\u image=itemView.findviewbyd(R.id.profile\u image); } } @凌驾 public int getItemViewType(int位置){ fuser=FirebaseAuth.getInstance().getCurrentUser(); if(mChat.get(position.getSender().equals(fuser.getUid())){ 返回消息类型右; }否则{ 返回消息类型左; } } }
  • 编辑: 因为我无法确定问题出在哪里

    整个消息活动

    导入de.hdodenhof.circleimageview.circleimageview

    public class MessageActivity extends AppCompatActivity {
    
        CircleImageView profile_image;
        TextView username;
    
        FirebaseUser fuser;
        DatabaseReference reference;
    
        ImageButton btn_send;
        EditText text_send;
    
        MessageAdapter messageAdapter;
        List<Chat> mchat;
    
        RecyclerView recyclerView;
    
        Intent intent;
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_message);
    
    
            // Toolbar
            Toolbar toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("");
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finish();
                }
            });
    
    
            // Recycler View
            recyclerView = findViewById(R.id.recycler_view);
            recyclerView.setHasFixedSize(true);
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
            linearLayoutManager.setStackFromEnd(true);
            recyclerView.setLayoutManager(linearLayoutManager);
    
    
    
            profile_image = findViewById(R.id.profile_image);
            username = findViewById(R.id.username);
            btn_send = findViewById(R.id.btn_send);
            text_send = findViewById(R.id.text_send);
    
            intent = getIntent();
            final String userid = intent.getStringExtra("userid");
            fuser = FirebaseAuth.getInstance().getCurrentUser();
    
    
    
            btn_send.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String msg = text_send.getText().toString();
                    if(!msg.equals("")){
                        sendMessage(fuser.getUid(), userid, msg);
                    } else {
                        Toast.makeText(MessageActivity.this, "You can't send empty message", Toast.LENGTH_SHORT).show();
                    }
                    text_send.setText("");
                }
            });
    
    
            reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
    
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    User user = dataSnapshot.getValue(User.class);
                    username.setText(user.getUsername());
                    if(user.getImageURL().equals("default")){
                        profile_image.setImageResource(R.mipmap.ic_launcher);
                    } else {
                        Glide.with(MessageActivity.this).load(user.getImageURL()).into(profile_image);
                    }
    
                    readMessage(fuser.getUid(), userid, user.getImageURL());
                }
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
    
                }
            });
        }
    
        private void sendMessage(String sender, String receiver, String message){
    
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
    
            HashMap<String, Object> hashMap = new HashMap<>();
            hashMap.put("sender", sender);
            hashMap.put("receiver", receiver);
            hashMap.put("message", message);
    
            reference.child("Chats").push().setValue(hashMap);
        }
    
        private void readMessage(final String myid, final String userid, final String imageurl){
            mchat = new ArrayList<>();
    
            reference = FirebaseDatabase.getInstance().getReference("Chats");
            reference.addValueEventListener(new ValueEventListener() {
                @Override
                /*public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    mchat.clear();
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                        Chat chat = snapshot.getValue(Chat.class);
                        if(chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
                            chat.getReceiver().equals(userid) && chat.getSender().equals(myid)){
                                mchat.add(chat);
                        }
    
                        messageAdapter = new MessageAdapter(MessageActivity.this, mchat, imageurl);
                        recyclerView.setAdapter(messageAdapter);
    
                    }
    
                } */
    
    
    
    
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    mchat.clear();
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                        Chat chat = snapshot.getValue(Chat.class);
                        if(chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
                                chat.getReceiver().equals(userid) && chat.getSender().equals(myid)){
                            mchat.add(chat);
                        }
    
                        messageAdapter = new MessageAdapter(MessageActivity.this, mchat, imageurl);
                        recyclerView.setAdapter(messageAdapter);
    
                    }
    
                }
    
    
    
    
    
    
    
    
                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
    
                }
            });
        }
    }
    
    公共类MessageActivity扩展了AppCompatActivity{
    圆形图像查看纵断面图;
    文本视图用户名;
    FirebaseUser定影器;
    数据库参考;
    图像按钮btn_发送;
    编辑文本发送;
    MessageAdapter消息适配器;
    列出mchat;
    回收视图回收视图;
    意图;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_消息);
    //工具栏
    Toolbar Toolbar=findviewbyd(R.id.Toolbar);
    设置支持操作栏(工具栏);
    getSupportActionBar().setTitle(“”);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setNavigationOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    完成();
    }
    });
    //回收者视图
    recyclerView=findViewById(R.id.recycler\u视图);
    recyclerView.setHasFixedSize(true);
    LinearLayoutManager LinearLayoutManager=新的LinearLayoutManager(getApplicationContext());
    linearLayoutManager.setStackFromEnd(true);
    recyclerView.setLayoutManager(linearLayoutManager);
    profile_image=findviewbyd(R.id.profile_image);
    username=findviewbyd(R.id.username);
    btn_send=findviewbyd(R.id.btn_send);
    text\u send=findviewbyd(R.id.text\u send);
    intent=getIntent();
    最终字符串userid=intent.getStringExtra(“userid”);
    fuser=FirebaseAuth.getInstance().getCurrentUser();
    btn_send.setOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图v){
    字符串msg=text_send.getText().toString();
    如果(!msg.equals(“”){
    sendMessage(fuser.getUid(),userid,msg);
    }否则{
    Toast.makeText(MessageActivity.this,“您不能发送空消息”,Toast.LENGTH_SHORT.show();
    }
    text_send.setText(“”);
    }
    });
    reference=FirebaseDatabase.getInstance().getReference(“用户”).child(用户ID);
    addValueEventListener(新的ValueEventListener(){
    @凌驾
    public void onDataChange(@NonNull DataSnapshot DataSnapshot){
    User=dataSnapshot.getValue(User.class);
    username.setText(user.getUsername());
    if(user.getImageURL().equals(“默认”)){
    profile_image.setImageResource(R.mipmap.ic_启动器);
    }否则{
    Glide.with(MessageActivity.this).load(user.getImageURL())到(profile\u image)中;
    }
    readMessage(fuser.getUid(),userid,user.getImageURL());
    }
    @凌驾
    已取消的公共void(@NonNull DatabaseError DatabaseError){
    }
    });
    }
    私有void sendMessage(字符串发送方、字符串接收方、字符串消息){
    DatabaseReference=FirebaseDatabase.getInstance().getReference();
    HashMap HashMap=新的HashMap();
    hashMap.put(“发送方”,发送方);
    hashMap.put(“接收方”,接收方);
    hashMap.put(“message”,message);
    reference.child(“Chats”).push().setValue(hashMap);
    }
    专用void readMessage(最终版本)
    
    FirebaseDatabase.getInstance().getReference().child("Chats").setValue(chatMessage);
    
    FirebaseDatabase.getInstance().getReference().child("Chats").push().setValue(chatMessage);